Kivy-examples 2.3.1.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/monkey.obj +7966 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/objloader.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/simple.glsl +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/editor.kv +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/main.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/compass.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/needle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/rose.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/main.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/takepicture.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/animation/animate.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite.py +152 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite_data/testkvdir.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_build.py +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_config.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv_in_template1.py +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/template1/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/testkvfile.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_advanced.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_basic.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_advanced.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_basic.py +58 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12908_sweet_trip_mm_clap_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12909_sweet_trip_mm_clap_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12910_sweet_trip_mm_clap_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12911_sweet_trip_mm_hat_cl.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12913_sweet_trip_mm_kick_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12914_sweet_trip_mm_kick_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12915_sweet_trip_mm_kick_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12916_sweet_trip_mm_kwik_mod_01.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12917_sweet_trip_mm_kwik_mod_02.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12918_sweet_trip_mm_kwik_mod_03.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12919_sweet_trip_mm_kwik_mod_04.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12920_sweet_trip_mm_kwik_mod_05.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12921_sweet_trip_mm_kwik_mod_06.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12922_sweet_trip_mm_kwik_mod_07.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12923_sweet_trip_mm_metal_clave.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12925_sweet_trip_mm_sweep_x.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12926_sweet_trip_mm_sweep_y.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12927_sweet_trip_mm_sweep_z.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/audio.kv +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/main.py +81 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/pitch.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/camera/main.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/bezier.py +105 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/canvas_stress.py +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/circle.py +84 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/fbo_canvas.py +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/kiwi.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines_extended.py +183 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh.py +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh_manipulation.py +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture1.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture2.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/multitexture.py +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/repeat_texture.py +65 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rotation.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rounded_rectangle.py +153 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/scale.py +37 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/stencil_canvas.py +85 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/tesselate.py +146 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture_example_image.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/1.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/2.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/3.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/root.kv +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/main.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_image.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_video.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/camera_puzzle.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/AnchorLayoutContainer.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/BoxLayoutContainer.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ButtonContainer.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/CheckBoxContainer.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FileChooserContainer.kv +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FloatLayoutContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/GridLayoutContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/LabelContainer.kv +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/MediaContainer.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PlaygroundContainer.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PopupContainer.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ProgressBarContainer.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/RestContainer.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ScatterContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/SelectorsContainer.kv +10 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/StackLayoutContainer.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/TextContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/kivycatalog.kv +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/main.py +192 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.kv +117 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.py +180 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/helpers.py +30 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.kv +164 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.py +276 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/main.py +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/multistroke.kv +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.kv +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.py +97 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Bubbles.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Ill1.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Wall.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/main.py +73 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/pictures.kv +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/main.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/shadereditor.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/README.txt +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/background.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/README +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/bug.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-left.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-right.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/accordions.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/bubbles.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/buttons.kv +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/carousel.kv +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/checkboxes.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/codeinput.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/dropdown.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/filechoosers.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/popups.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/progressbar.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/rstdocument.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/scatter.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/screenmanager.kv +46 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/sliders.kv +55 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/spinner.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/splitter.kv +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/switches.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/tabbedpanel + layouts.kv +69 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/textinputs.kv +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/togglebutton.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/main.py +243 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/showcase.kv +100 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/README.txt +12 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/main.py +170 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/particle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/touchtracer.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_client_app.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_server_app.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/twistd_app.py +66 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/gesture_board.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/my_gestures.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/controller.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/main.py +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/1_skeleton.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/2_print_touch.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/3_draw_ellipse.py +22 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/4_draw_line.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/5_random_colors.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/6_button.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/quickstart/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/layout.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/main.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/test.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/main.py +226 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/numeric.json +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/README.txt +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/kinectviewer.py +283 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_camera.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_fbo.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_layout.kv +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_logo.kv +36 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_scatter.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_stencil.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_video.kv +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/builder_template.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/id_in_kv.py +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/kv_and_py.py +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kivy.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kvrun.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/clipboard.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/custom_titlebar.py +56 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/imagesave.py +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/joystick.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/multiple_dropfile.py +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/on_textedit_event.py +104 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/opacitywindow.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapecollisions.py +397 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapedwindow.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/two_panes.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/urlrequest.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/main.py +122 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.py +86 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.kv +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.py +102 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/tex3.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/benchmark.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/cloud.svg +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main-smaa.py +155 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/music.svg +68 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/rotated.svg +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/ship.svg +181 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/sun.svg +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/tiger.svg +813 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/text/pango_demo.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/data/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/main.py +163 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/note.kv +154 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/main.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/pong.kv +2 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/pong.kv +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/main.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/pong.kv +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/main.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/pong.kv +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/main.py +75 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/accordion_1.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/actionbar.py +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/asyncimage.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/boxlayout_poshint.py +54 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/bubble_test.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/camera.py +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/carousel_buttons.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.mpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinput.py +225 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinputtest.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorpicker.py +234 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorusage.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/compound_selection.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/customcollide.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget2.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget3_advanced.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/fbowidget.py +111 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/focus_behavior.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/image_mipmap.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/keyboardlistener.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_mipmap.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_sizing.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_text_size.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_with_markup.py +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/lang_dynamic_classes.py +18 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/pagelayout.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/popup_with_kv.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/basic_data.py +124 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/infinite_scrolling.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/key_viewclass.py +149 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/messenger.py +196 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/pull_to_refresh.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/rv_animate_items.py +109 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/rstexample.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/screenmanager.py +106 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.py +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/bird.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white_animated.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/cube.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/simple_cv_joint_animated.gif +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.kv +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.py +150 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/__init__.py +7 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/custom_button.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/settings.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/shorten_text.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/spinner.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/splitter.py +74 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbed_panel_showcase.py +316 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbedpanel.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.kv +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textinput.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/unicode_textinput.py +244 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/videoplayer.py +26 -0
- Kivy_examples-2.3.1.dev0.dist-info/AUTHORS +66 -0
- Kivy_examples-2.3.1.dev0.dist-info/LICENSE +21 -0
- Kivy_examples-2.3.1.dev0.dist-info/METADATA +382 -0
- Kivy_examples-2.3.1.dev0.dist-info/RECORD +624 -0
- Kivy_examples-2.3.1.dev0.dist-info/WHEEL +5 -0
- Kivy_examples-2.3.1.dev0.dist-info/dependency_links.txt +1 -0
- Kivy_examples-2.3.1.dev0.dist-info/top_level.txt +1 -0
- kivy/__init__.py +519 -0
- kivy/_version.py +18 -0
- kivy/animation.py +831 -0
- kivy/app.py +1213 -0
- kivy/atlas.py +456 -0
- kivy/base.py +617 -0
- kivy/cache.py +262 -0
- kivy/clock.py +1172 -0
- kivy/compat.py +82 -0
- kivy/config.py +1004 -0
- kivy/context.py +102 -0
- kivy/core/__init__.py +247 -0
- kivy/core/audio/__init__.py +223 -0
- kivy/core/audio/audio_android.py +104 -0
- kivy/core/audio/audio_avplayer.py +82 -0
- kivy/core/audio/audio_ffpyplayer.py +185 -0
- kivy/core/audio/audio_gstplayer.py +101 -0
- kivy/core/audio/audio_pygame.py +127 -0
- kivy/core/camera/__init__.py +151 -0
- kivy/core/camera/camera_android.py +206 -0
- kivy/core/camera/camera_gi.py +170 -0
- kivy/core/camera/camera_opencv.py +163 -0
- kivy/core/camera/camera_picamera.py +96 -0
- kivy/core/clipboard/__init__.py +157 -0
- kivy/core/clipboard/_clipboard_ext.py +36 -0
- kivy/core/clipboard/clipboard_android.py +91 -0
- kivy/core/clipboard/clipboard_dbusklipper.py +41 -0
- kivy/core/clipboard/clipboard_dummy.py +26 -0
- kivy/core/clipboard/clipboard_gtk3.py +47 -0
- kivy/core/clipboard/clipboard_nspaste.py +44 -0
- kivy/core/clipboard/clipboard_pygame.py +67 -0
- kivy/core/clipboard/clipboard_sdl2.py +36 -0
- kivy/core/clipboard/clipboard_winctypes.py +107 -0
- kivy/core/clipboard/clipboard_xclip.py +29 -0
- kivy/core/clipboard/clipboard_xsel.py +26 -0
- kivy/core/gl/__init__.py +90 -0
- kivy/core/image/__init__.py +996 -0
- kivy/core/image/img_dds.py +40 -0
- kivy/core/image/img_ffpyplayer.py +87 -0
- kivy/core/image/img_pil.py +123 -0
- kivy/core/image/img_pygame.py +119 -0
- kivy/core/image/img_sdl2.py +66 -0
- kivy/core/image/img_tex.py +58 -0
- kivy/core/spelling/__init__.py +135 -0
- kivy/core/spelling/spelling_enchant.py +50 -0
- kivy/core/spelling/spelling_osxappkit.py +64 -0
- kivy/core/text/__init__.py +1090 -0
- kivy/core/text/markup.py +893 -0
- kivy/core/text/text_pango.py +145 -0
- kivy/core/text/text_pil.py +84 -0
- kivy/core/text/text_pygame.py +117 -0
- kivy/core/text/text_sdl2.py +50 -0
- kivy/core/video/__init__.py +219 -0
- kivy/core/video/video_ffmpeg.py +106 -0
- kivy/core/video/video_ffpyplayer.py +449 -0
- kivy/core/video/video_gstplayer.py +140 -0
- kivy/core/video/video_null.py +12 -0
- kivy/core/window/__init__.py +2515 -0
- kivy/core/window/window_egl_rpi.py +86 -0
- kivy/core/window/window_pygame.py +441 -0
- kivy/core/window/window_sdl2.py +999 -0
- kivy/deps/__init__.py +6 -0
- kivy/effects/__init__.py +23 -0
- kivy/effects/dampedscroll.py +114 -0
- kivy/effects/kinetic.py +193 -0
- kivy/effects/opacityscroll.py +27 -0
- kivy/effects/scroll.py +126 -0
- kivy/event.py +12 -0
- kivy/eventmanager/__init__.py +185 -0
- kivy/extras/__init__.py +0 -0
- kivy/extras/highlight.py +52 -0
- kivy/factory.py +190 -0
- kivy/factory_registers.py +201 -0
- kivy/garden/__init__.py +186 -0
- kivy/geometry.py +121 -0
- kivy/gesture.py +424 -0
- kivy/graphics/__init__.py +126 -0
- kivy/graphics/cgl_backend/__init__.py +0 -0
- kivy/input/__init__.py +39 -0
- kivy/input/factory.py +35 -0
- kivy/input/motionevent.py +587 -0
- kivy/input/postproc/__init__.py +27 -0
- kivy/input/postproc/calibration.py +200 -0
- kivy/input/postproc/dejitter.py +74 -0
- kivy/input/postproc/doubletap.py +101 -0
- kivy/input/postproc/ignorelist.py +47 -0
- kivy/input/postproc/retaintouch.py +93 -0
- kivy/input/postproc/tripletap.py +106 -0
- kivy/input/provider.py +40 -0
- kivy/input/providers/__init__.py +68 -0
- kivy/input/providers/androidjoystick.py +117 -0
- kivy/input/providers/hidinput.py +778 -0
- kivy/input/providers/leapfinger.py +113 -0
- kivy/input/providers/linuxwacom.py +396 -0
- kivy/input/providers/mactouch.py +220 -0
- kivy/input/providers/mouse.py +424 -0
- kivy/input/providers/mtdev.py +380 -0
- kivy/input/providers/probesysfs.py +254 -0
- kivy/input/providers/tuio.py +326 -0
- kivy/input/providers/wm_common.py +162 -0
- kivy/input/providers/wm_pen.py +121 -0
- kivy/input/providers/wm_touch.py +157 -0
- kivy/input/recorder.py +335 -0
- kivy/input/shape.py +27 -0
- kivy/interactive.py +335 -0
- kivy/lang/__init__.py +883 -0
- kivy/lang/builder.py +1004 -0
- kivy/lang/parser.py +822 -0
- kivy/lib/__init__.py +21 -0
- kivy/lib/ddsfile.py +419 -0
- kivy/lib/gstplayer/__init__.py +27 -0
- kivy/lib/mtdev.py +254 -0
- kivy/lib/vidcore_lite/__init__.py +0 -0
- kivy/loader.py +579 -0
- kivy/logger.py +646 -0
- kivy/metrics.py +421 -0
- kivy/modules/__init__.py +300 -0
- kivy/modules/_webdebugger.py +200 -0
- kivy/modules/console.py +1059 -0
- kivy/modules/cursor.py +75 -0
- kivy/modules/inspector.py +755 -0
- kivy/modules/joycursor.py +299 -0
- kivy/modules/keybinding.py +64 -0
- kivy/modules/monitor.py +90 -0
- kivy/modules/recorder.py +94 -0
- kivy/modules/screen.py +183 -0
- kivy/modules/showborder.py +33 -0
- kivy/modules/touchring.py +97 -0
- kivy/modules/webdebugger.py +30 -0
- kivy/multistroke.py +1477 -0
- kivy/network/__init__.py +7 -0
- kivy/network/urlrequest.py +794 -0
- kivy/parser.py +154 -0
- kivy/resources.py +102 -0
- kivy/storage/__init__.py +405 -0
- kivy/storage/dictstore.py +98 -0
- kivy/storage/jsonstore.py +92 -0
- kivy/storage/redisstore.py +103 -0
- kivy/support.py +267 -0
- kivy/tests/__init__.py +11 -0
- kivy/tests/async_common.py +568 -0
- kivy/tests/common.py +524 -0
- kivy/tests/conftest.py +33 -0
- kivy/tests/fixtures.py +169 -0
- kivy/tests/perf_test_textinput.py +195 -0
- kivy/tests/pyinstaller/simple_widget/main.py +12 -0
- kivy/tests/pyinstaller/simple_widget/project/__init__.py +0 -0
- kivy/tests/pyinstaller/simple_widget/project/widget.py +12 -0
- kivy/tests/pyinstaller/test_pyinstaller.py +115 -0
- kivy/tests/pyinstaller/video_widget/main.py +6 -0
- kivy/tests/pyinstaller/video_widget/project/__init__.py +38 -0
- kivy/tests/test_animations.py +415 -0
- kivy/tests/test_app.py +216 -0
- kivy/tests/test_audio.py +69 -0
- kivy/tests/test_benchmark.py +292 -0
- kivy/tests/test_clipboard.py +48 -0
- kivy/tests/test_clock.py +292 -0
- kivy/tests/test_compat.py +6 -0
- kivy/tests/test_config.py +35 -0
- kivy/tests/test_coverage.py +83 -0
- kivy/tests/test_doc_gallery.py +38 -0
- kivy/tests/test_environ_cli.py +50 -0
- kivy/tests/test_fbo_py2py3.py +74 -0
- kivy/tests/test_filechooser.py +11 -0
- kivy/tests/test_filechooser_unicode.py +82 -0
- kivy/tests/test_fonts.py +42 -0
- kivy/tests/test_garden.py +23 -0
- kivy/tests/test_graphics.py +1149 -0
- kivy/tests/test_graphics_svg.py +84 -0
- kivy/tests/test_image.py +74 -0
- kivy/tests/test_imageloader.py +485 -0
- kivy/tests/test_invalid_lang.py +42 -0
- kivy/tests/test_issues/test_6315.py +55 -0
- kivy/tests/test_issues/test_issue_1084.py +47 -0
- kivy/tests/test_issues/test_issue_1091.py +19 -0
- kivy/tests/test_issues/test_issue_599.py +21 -0
- kivy/tests/test_issues/test_issue_609.py +19 -0
- kivy/tests/test_issues/test_issue_6909.py +28 -0
- kivy/tests/test_issues/test_issue_883.py +12 -0
- kivy/tests/test_kivy_init.py +30 -0
- kivy/tests/test_knspace.py +247 -0
- kivy/tests/test_lang.py +431 -0
- kivy/tests/test_lang_complex.py +87 -0
- kivy/tests/test_lang_pre_process_and_post_process.py +394 -0
- kivy/tests/test_logger.py +516 -0
- kivy/tests/test_metrics.py +30 -0
- kivy/tests/test_module_inspector.py +382 -0
- kivy/tests/test_motion_event.py +44 -0
- kivy/tests/test_mouse_hover_event.py +249 -0
- kivy/tests/test_mouse_multitouchsim.py +554 -0
- kivy/tests/test_multistroke.py +389 -0
- kivy/tests/test_properties.py +1332 -0
- kivy/tests/test_resources.py +79 -0
- kivy/tests/test_rst_replace.py +63 -0
- kivy/tests/test_screen.py +38 -0
- kivy/tests/test_storage.py +135 -0
- kivy/tests/test_uix_actionbar.py +363 -0
- kivy/tests/test_uix_anchorlayout.py +79 -0
- kivy/tests/test_uix_asyncimage.py +133 -0
- kivy/tests/test_uix_boxlayout.py +94 -0
- kivy/tests/test_uix_bubble.py +425 -0
- kivy/tests/test_uix_carousel.py +93 -0
- kivy/tests/test_uix_colorpicker.py +77 -0
- kivy/tests/test_uix_dropdown.py +91 -0
- kivy/tests/test_uix_gridlayout.py +244 -0
- kivy/tests/test_uix_layout.py +16 -0
- kivy/tests/test_uix_modal.py +101 -0
- kivy/tests/test_uix_recyclegridlayout.py +383 -0
- kivy/tests/test_uix_relativelayout.py +30 -0
- kivy/tests/test_uix_scrollview.py +358 -0
- kivy/tests/test_uix_settings.py +33 -0
- kivy/tests/test_uix_slider.py +156 -0
- kivy/tests/test_uix_stacklayout.py +120 -0
- kivy/tests/test_uix_textinput.py +577 -0
- kivy/tests/test_uix_translate_coordinates.py +72 -0
- kivy/tests/test_uix_videoplayer.py +112 -0
- kivy/tests/test_uix_widget.py +137 -0
- kivy/tests/test_urlrequest/test_urlrequest_requests.py +378 -0
- kivy/tests/test_urlrequest/test_urlrequest_urllib.py +155 -0
- kivy/tests/test_utils.py +237 -0
- kivy/tests/test_vector.py +256 -0
- kivy/tests/test_video.py +25 -0
- kivy/tests/test_weakmethod.py +44 -0
- kivy/tests/test_widget.py +127 -0
- kivy/tests/test_widget_walk.py +70 -0
- kivy/tests/test_window_base.py +60 -0
- kivy/tests/test_window_info.py +29 -0
- kivy/tests/visual_test_label.py +291 -0
- kivy/tools/__init__.py +44 -0
- kivy/tools/benchmark.py +286 -0
- kivy/tools/changelog_parser.py +120 -0
- kivy/tools/coverage.py +135 -0
- kivy/tools/gallery.py +323 -0
- kivy/tools/generate-icons.py +117 -0
- kivy/tools/gles_compat/subset_gles.py +125 -0
- kivy/tools/highlight/__init__.py +9 -0
- kivy/tools/kviewer.py +80 -0
- kivy/tools/packaging/__init__.py +12 -0
- kivy/tools/packaging/cython_cfg.py +82 -0
- kivy/tools/packaging/factory.py +105 -0
- kivy/tools/packaging/pyinstaller_hooks/__init__.py +381 -0
- kivy/tools/packaging/pyinstaller_hooks/__main__.py +29 -0
- kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py +9 -0
- kivy/tools/packaging/pyinstaller_hooks/pyi_rth_kivy.py +17 -0
- kivy/tools/pep8checker/pep8.py +2316 -0
- kivy/tools/pep8checker/pep8kivy.py +109 -0
- kivy/tools/report.py +223 -0
- kivy/tools/stub-gl-debug.py +201 -0
- kivy/tools/texturecompress.py +233 -0
- kivy/uix/__init__.py +56 -0
- kivy/uix/accordion.py +484 -0
- kivy/uix/actionbar.py +934 -0
- kivy/uix/anchorlayout.py +122 -0
- kivy/uix/behaviors/__init__.py +95 -0
- kivy/uix/behaviors/button.py +212 -0
- kivy/uix/behaviors/codenavigation.py +167 -0
- kivy/uix/behaviors/compoundselection.py +688 -0
- kivy/uix/behaviors/cover.py +160 -0
- kivy/uix/behaviors/drag.py +234 -0
- kivy/uix/behaviors/emacs.py +140 -0
- kivy/uix/behaviors/focus.py +595 -0
- kivy/uix/behaviors/knspace.py +590 -0
- kivy/uix/behaviors/togglebutton.py +156 -0
- kivy/uix/behaviors/touchripple.py +318 -0
- kivy/uix/boxlayout.py +331 -0
- kivy/uix/bubble.py +576 -0
- kivy/uix/button.py +137 -0
- kivy/uix/camera.py +118 -0
- kivy/uix/carousel.py +695 -0
- kivy/uix/checkbox.py +197 -0
- kivy/uix/codeinput.py +238 -0
- kivy/uix/colorpicker.py +486 -0
- kivy/uix/dropdown.py +391 -0
- kivy/uix/effectwidget.py +772 -0
- kivy/uix/filechooser.py +1134 -0
- kivy/uix/floatlayout.py +148 -0
- kivy/uix/gesturesurface.py +625 -0
- kivy/uix/gridlayout.py +629 -0
- kivy/uix/image.py +528 -0
- kivy/uix/label.py +1200 -0
- kivy/uix/layout.py +322 -0
- kivy/uix/modalview.py +339 -0
- kivy/uix/pagelayout.py +233 -0
- kivy/uix/popup.py +266 -0
- kivy/uix/progressbar.py +95 -0
- kivy/uix/recycleboxlayout.py +183 -0
- kivy/uix/recyclegridlayout.py +255 -0
- kivy/uix/recyclelayout.py +446 -0
- kivy/uix/recycleview/__init__.py +624 -0
- kivy/uix/recycleview/datamodel.py +194 -0
- kivy/uix/recycleview/layout.py +253 -0
- kivy/uix/recycleview/views.py +423 -0
- kivy/uix/relativelayout.py +324 -0
- kivy/uix/rst.py +1492 -0
- kivy/uix/sandbox.py +198 -0
- kivy/uix/scatter.py +645 -0
- kivy/uix/scatterlayout.py +93 -0
- kivy/uix/screenmanager.py +1275 -0
- kivy/uix/scrollview.py +1288 -0
- kivy/uix/settings.py +1343 -0
- kivy/uix/slider.py +421 -0
- kivy/uix/spinner.py +221 -0
- kivy/uix/splitter.py +430 -0
- kivy/uix/stacklayout.py +331 -0
- kivy/uix/stencilview.py +40 -0
- kivy/uix/switch.py +122 -0
- kivy/uix/tabbedpanel.py +880 -0
- kivy/uix/textinput.py +4049 -0
- kivy/uix/togglebutton.py +37 -0
- kivy/uix/treeview.py +665 -0
- kivy/uix/video.py +302 -0
- kivy/uix/videoplayer.py +697 -0
- kivy/uix/vkeyboard.py +879 -0
- kivy/uix/widget.py +1629 -0
- kivy/utils.py +550 -0
- kivy/vector.py +412 -0
- kivy/weakmethod.py +72 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Calibration
|
|
3
|
+
===========
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.9.0
|
|
6
|
+
|
|
7
|
+
Recalibrate input device to a specific range / offset.
|
|
8
|
+
|
|
9
|
+
Let's say you have 3 1080p displays, the 2 firsts are multitouch. By default,
|
|
10
|
+
both will have mixed touch, the range will conflict with each others: the 0-1
|
|
11
|
+
range will goes to 0-5760 px (remember, 3 * 1920 = 5760.)
|
|
12
|
+
|
|
13
|
+
To fix it, you need to manually reference them. For example::
|
|
14
|
+
|
|
15
|
+
[input]
|
|
16
|
+
left = mtdev,/dev/input/event17
|
|
17
|
+
middle = mtdev,/dev/input/event15
|
|
18
|
+
# the right screen is just a display.
|
|
19
|
+
|
|
20
|
+
Then, you can use the calibration postproc module::
|
|
21
|
+
|
|
22
|
+
[postproc:calibration]
|
|
23
|
+
left = xratio=0.3333
|
|
24
|
+
middle = xratio=0.3333,xoffset=0.3333
|
|
25
|
+
|
|
26
|
+
Now, the touches from the left screen will be within 0-0.3333 range, and the
|
|
27
|
+
touches from the middle screen will be within 0.3333-0.6666 range.
|
|
28
|
+
|
|
29
|
+
You can also match calibration rules to devices based on their provider type.
|
|
30
|
+
This is useful when probesysfs is used to match devices. For example::
|
|
31
|
+
|
|
32
|
+
[input]
|
|
33
|
+
mtdev_%(name)s = probesysfs,provider=mtdev
|
|
34
|
+
|
|
35
|
+
Then to apply calibration to any mtdev device, you can assign rules to the
|
|
36
|
+
provider name enclosed by parentheses::
|
|
37
|
+
|
|
38
|
+
[postproc:calibration]
|
|
39
|
+
(mtdev) = xratio=0.3333,xoffset=0.3333
|
|
40
|
+
|
|
41
|
+
Calibrating devices like this means the device's path doesn't need to be
|
|
42
|
+
configured ahead of time. Note that with this method, all mtdev inputs will
|
|
43
|
+
have the same calibration applied to them. For this reason, matching by
|
|
44
|
+
provider will typically be useful when expecting only one input device.
|
|
45
|
+
'''
|
|
46
|
+
|
|
47
|
+
__all__ = ('InputPostprocCalibration', )
|
|
48
|
+
|
|
49
|
+
from kivy.config import Config
|
|
50
|
+
from kivy.logger import Logger
|
|
51
|
+
from kivy.input import providers
|
|
52
|
+
from kivy.input.factory import MotionEventFactory
|
|
53
|
+
from kivy.input.motionevent import MotionEvent
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class InputPostprocCalibration(object):
|
|
57
|
+
'''Recalibrate the inputs.
|
|
58
|
+
|
|
59
|
+
The configuration must go within a section named `postproc:calibration`.
|
|
60
|
+
Within the section, you must have a line like::
|
|
61
|
+
|
|
62
|
+
devicename = param=value,param=value
|
|
63
|
+
|
|
64
|
+
If you wish to match by provider, you must have a line like::
|
|
65
|
+
|
|
66
|
+
(provider) = param=value,param=value
|
|
67
|
+
|
|
68
|
+
:Parameters:
|
|
69
|
+
`xratio`: float
|
|
70
|
+
Value to multiply X
|
|
71
|
+
`yratio`: float
|
|
72
|
+
Value to multiply Y
|
|
73
|
+
`xoffset`: float
|
|
74
|
+
Value to add to X
|
|
75
|
+
`yoffset`: float
|
|
76
|
+
Value to add to Y
|
|
77
|
+
`auto`: str
|
|
78
|
+
If set, then the touch is transformed from screen-relative
|
|
79
|
+
to window-relative The value is used as an indication of
|
|
80
|
+
screen size, e.g for fullHD:
|
|
81
|
+
|
|
82
|
+
auto=1920x1080
|
|
83
|
+
|
|
84
|
+
If present, this setting overrides all the others.
|
|
85
|
+
This assumes the input device exactly covers the display
|
|
86
|
+
area, if they are different, the computations will be wrong.
|
|
87
|
+
|
|
88
|
+
.. versionchanged:: 1.11.0
|
|
89
|
+
Added `auto` parameter
|
|
90
|
+
'''
|
|
91
|
+
|
|
92
|
+
def __init__(self):
|
|
93
|
+
super(InputPostprocCalibration, self).__init__()
|
|
94
|
+
self.devices = {}
|
|
95
|
+
self.frame = 0
|
|
96
|
+
self.provider_map = self._get_provider_map()
|
|
97
|
+
if not Config.has_section('postproc:calibration'):
|
|
98
|
+
return
|
|
99
|
+
default_params = {'xoffset': 0, 'yoffset': 0, 'xratio': 1, 'yratio': 1}
|
|
100
|
+
for device_key, params_str in Config.items('postproc:calibration'):
|
|
101
|
+
params = default_params.copy()
|
|
102
|
+
for param in params_str.split(','):
|
|
103
|
+
param = param.strip()
|
|
104
|
+
if not param:
|
|
105
|
+
continue
|
|
106
|
+
key, value = param.split('=', 1)
|
|
107
|
+
if key == 'auto':
|
|
108
|
+
width, height = [float(x) for x in value.split('x')]
|
|
109
|
+
params['auto'] = width, height
|
|
110
|
+
break
|
|
111
|
+
if key not in ('xoffset', 'yoffset', 'xratio', 'yratio'):
|
|
112
|
+
Logger.error(
|
|
113
|
+
'Calibration: invalid key provided: {}'.format(key))
|
|
114
|
+
params[key] = float(value)
|
|
115
|
+
self.devices[device_key] = params
|
|
116
|
+
|
|
117
|
+
def _get_provider_map(self):
|
|
118
|
+
"""Iterates through all registered input provider names and finds the
|
|
119
|
+
respective MotionEvent subclass for each. Returns a dict of MotionEvent
|
|
120
|
+
subclasses mapped to their provider name.
|
|
121
|
+
"""
|
|
122
|
+
provider_map = {}
|
|
123
|
+
for input_provider in MotionEventFactory.list():
|
|
124
|
+
if not hasattr(providers, input_provider):
|
|
125
|
+
continue
|
|
126
|
+
|
|
127
|
+
p = getattr(providers, input_provider)
|
|
128
|
+
for m in p.__all__:
|
|
129
|
+
event = getattr(p, m)
|
|
130
|
+
if issubclass(event, MotionEvent):
|
|
131
|
+
provider_map[event] = input_provider
|
|
132
|
+
|
|
133
|
+
return provider_map
|
|
134
|
+
|
|
135
|
+
def _get_provider_key(self, event):
|
|
136
|
+
"""Returns the provider key for the event if the provider is configured
|
|
137
|
+
for calibration.
|
|
138
|
+
"""
|
|
139
|
+
input_type = self.provider_map.get(event.__class__)
|
|
140
|
+
key = '({})'.format(input_type)
|
|
141
|
+
if input_type and key in self.devices:
|
|
142
|
+
return key
|
|
143
|
+
|
|
144
|
+
def process(self, events):
|
|
145
|
+
# avoid doing any processing if there is no device to calibrate at all.
|
|
146
|
+
if not self.devices:
|
|
147
|
+
return events
|
|
148
|
+
|
|
149
|
+
self.frame += 1
|
|
150
|
+
frame = self.frame
|
|
151
|
+
to_remove = []
|
|
152
|
+
for etype, event in events:
|
|
153
|
+
# frame-based logic below doesn't account for
|
|
154
|
+
# end events having been already processed
|
|
155
|
+
if etype == 'end':
|
|
156
|
+
continue
|
|
157
|
+
|
|
158
|
+
if event.device in self.devices:
|
|
159
|
+
dev = event.device
|
|
160
|
+
else:
|
|
161
|
+
dev = self._get_provider_key(event)
|
|
162
|
+
if not dev:
|
|
163
|
+
continue
|
|
164
|
+
|
|
165
|
+
# some providers use the same event to update and end
|
|
166
|
+
if 'calibration:frame' not in event.ud:
|
|
167
|
+
event.ud['calibration:frame'] = frame
|
|
168
|
+
elif event.ud['calibration:frame'] == frame:
|
|
169
|
+
continue
|
|
170
|
+
event.ud['calibration:frame'] = frame
|
|
171
|
+
|
|
172
|
+
params = self.devices[dev]
|
|
173
|
+
if 'auto' in params:
|
|
174
|
+
event.sx, event.sy = self.auto_calibrate(
|
|
175
|
+
event.sx, event.sy, params['auto'])
|
|
176
|
+
if not (0 <= event.sx <= 1 and 0 <= event.sy <= 1):
|
|
177
|
+
to_remove.append((etype, event))
|
|
178
|
+
else:
|
|
179
|
+
event.sx = event.sx * params['xratio'] + params['xoffset']
|
|
180
|
+
event.sy = event.sy * params['yratio'] + params['yoffset']
|
|
181
|
+
|
|
182
|
+
for event in to_remove:
|
|
183
|
+
events.remove(event)
|
|
184
|
+
|
|
185
|
+
return events
|
|
186
|
+
|
|
187
|
+
def auto_calibrate(self, sx, sy, size):
|
|
188
|
+
from kivy.core.window import Window as W
|
|
189
|
+
WIDTH, HEIGHT = size
|
|
190
|
+
|
|
191
|
+
xratio = WIDTH / W.width
|
|
192
|
+
yratio = HEIGHT / W.height
|
|
193
|
+
|
|
194
|
+
xoffset = - W.left / W.width
|
|
195
|
+
yoffset = - (HEIGHT - W.top - W.height) / W.height
|
|
196
|
+
|
|
197
|
+
sx = sx * xratio + xoffset
|
|
198
|
+
sy = sy * yratio + yoffset
|
|
199
|
+
|
|
200
|
+
return sx, sy
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Dejitter
|
|
3
|
+
========
|
|
4
|
+
|
|
5
|
+
Prevent blob jittering.
|
|
6
|
+
|
|
7
|
+
A problem that is often faced (esp. in optical MT setups) is that of
|
|
8
|
+
jitterish BLOBs caused by bad camera characteristics. With this module
|
|
9
|
+
you can get rid of that jitter. You just define a threshold
|
|
10
|
+
`jitter_distance` in your config, and all touch movements that move
|
|
11
|
+
the touch by less than the jitter distance are considered 'bad'
|
|
12
|
+
movements caused by jitter and will be discarded.
|
|
13
|
+
'''
|
|
14
|
+
|
|
15
|
+
__all__ = ('InputPostprocDejitter', )
|
|
16
|
+
|
|
17
|
+
from kivy.config import Config
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class InputPostprocDejitter(object):
|
|
21
|
+
'''
|
|
22
|
+
Get rid of jitterish BLOBs.
|
|
23
|
+
Example::
|
|
24
|
+
|
|
25
|
+
[postproc]
|
|
26
|
+
jitter_distance = 0.004
|
|
27
|
+
jitter_ignore_devices = mouse,mactouch
|
|
28
|
+
|
|
29
|
+
:Configuration:
|
|
30
|
+
`jitter_distance`: float
|
|
31
|
+
A float in range 0-1.
|
|
32
|
+
`jitter_ignore_devices`: string
|
|
33
|
+
A comma-separated list of device identifiers that
|
|
34
|
+
should not be processed by dejitter (because they're
|
|
35
|
+
very precise already).
|
|
36
|
+
'''
|
|
37
|
+
|
|
38
|
+
def __init__(self):
|
|
39
|
+
self.jitterdist = Config.getfloat('postproc', 'jitter_distance')
|
|
40
|
+
ignore_devices = Config.get('postproc', 'jitter_ignore_devices')
|
|
41
|
+
self.ignore_devices = ignore_devices.split(',')
|
|
42
|
+
self.last_touches = {}
|
|
43
|
+
|
|
44
|
+
def taxicab_distance(self, p, q):
|
|
45
|
+
# Get the taxicab/manhattan/citiblock distance for efficiency reasons
|
|
46
|
+
return abs(p[0] - q[0]) + abs(p[1] - q[1])
|
|
47
|
+
|
|
48
|
+
def process(self, events):
|
|
49
|
+
if not self.jitterdist:
|
|
50
|
+
return events
|
|
51
|
+
processed = []
|
|
52
|
+
for etype, touch in events:
|
|
53
|
+
if not touch.is_touch:
|
|
54
|
+
continue
|
|
55
|
+
if touch.device in self.ignore_devices:
|
|
56
|
+
processed.append((etype, touch))
|
|
57
|
+
continue
|
|
58
|
+
if etype == 'begin':
|
|
59
|
+
self.last_touches[touch.id] = touch.spos
|
|
60
|
+
if etype == 'end':
|
|
61
|
+
if touch.id in self.last_touches:
|
|
62
|
+
del self.last_touches[touch.id]
|
|
63
|
+
if etype != 'update':
|
|
64
|
+
processed.append((etype, touch))
|
|
65
|
+
continue
|
|
66
|
+
# Check whether the touch moved more than the jitter distance
|
|
67
|
+
last_spos = self.last_touches[touch.id]
|
|
68
|
+
dist = self.taxicab_distance(last_spos, touch.spos)
|
|
69
|
+
if dist > self.jitterdist:
|
|
70
|
+
# Only if the touch has moved more than the jitter dist we take
|
|
71
|
+
# it into account and dispatch it. Otherwise suppress it.
|
|
72
|
+
self.last_touches[touch.id] = touch.spos
|
|
73
|
+
processed.append((etype, touch))
|
|
74
|
+
return processed
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Double Tap
|
|
3
|
+
==========
|
|
4
|
+
|
|
5
|
+
Search touch for a double tap
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('InputPostprocDoubleTap', )
|
|
9
|
+
|
|
10
|
+
from time import time
|
|
11
|
+
from kivy.config import Config
|
|
12
|
+
from kivy.vector import Vector
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InputPostprocDoubleTap(object):
|
|
16
|
+
'''
|
|
17
|
+
InputPostProcDoubleTap is a post-processor to check if
|
|
18
|
+
a touch is a double tap or not.
|
|
19
|
+
Double tap can be configured in the Kivy config file::
|
|
20
|
+
|
|
21
|
+
[postproc]
|
|
22
|
+
double_tap_time = 250
|
|
23
|
+
double_tap_distance = 20
|
|
24
|
+
|
|
25
|
+
Distance parameter is in the range 0-1000 and time is in milliseconds.
|
|
26
|
+
'''
|
|
27
|
+
|
|
28
|
+
def __init__(self):
|
|
29
|
+
dist = Config.getint('postproc', 'double_tap_distance')
|
|
30
|
+
self.double_tap_distance = dist / 1000.0
|
|
31
|
+
tap_time = Config.getint('postproc', 'double_tap_time')
|
|
32
|
+
self.double_tap_time = tap_time / 1000.0
|
|
33
|
+
self.touches = {}
|
|
34
|
+
|
|
35
|
+
def find_double_tap(self, ref):
|
|
36
|
+
'''Find a double tap touch within self.touches.
|
|
37
|
+
The touch must be not a previous double tap and the distance must be
|
|
38
|
+
within the specified threshold. Additionally, the touch profiles
|
|
39
|
+
must be the same kind of touch.
|
|
40
|
+
'''
|
|
41
|
+
ref_button = None
|
|
42
|
+
if 'button' in ref.profile:
|
|
43
|
+
ref_button = ref.button
|
|
44
|
+
|
|
45
|
+
for touchid in self.touches:
|
|
46
|
+
if ref.uid == touchid:
|
|
47
|
+
continue
|
|
48
|
+
etype, touch = self.touches[touchid]
|
|
49
|
+
if etype != 'end':
|
|
50
|
+
continue
|
|
51
|
+
if touch.is_double_tap:
|
|
52
|
+
continue
|
|
53
|
+
distance = Vector.distance(
|
|
54
|
+
Vector(ref.sx, ref.sy),
|
|
55
|
+
Vector(touch.osx, touch.osy))
|
|
56
|
+
if distance > self.double_tap_distance:
|
|
57
|
+
continue
|
|
58
|
+
if touch.is_mouse_scrolling or ref.is_mouse_scrolling:
|
|
59
|
+
continue
|
|
60
|
+
touch_button = None
|
|
61
|
+
if 'button' in touch.profile:
|
|
62
|
+
touch_button = touch.button
|
|
63
|
+
if touch_button != ref_button:
|
|
64
|
+
continue
|
|
65
|
+
touch.double_tap_distance = distance
|
|
66
|
+
return touch
|
|
67
|
+
|
|
68
|
+
def process(self, events):
|
|
69
|
+
if self.double_tap_distance == 0 or self.double_tap_time == 0:
|
|
70
|
+
return events
|
|
71
|
+
# first, check if a touch down have a double tap
|
|
72
|
+
for etype, touch in events:
|
|
73
|
+
if not touch.is_touch:
|
|
74
|
+
continue
|
|
75
|
+
if etype == 'begin':
|
|
76
|
+
double_tap = self.find_double_tap(touch)
|
|
77
|
+
if double_tap:
|
|
78
|
+
touch.is_double_tap = True
|
|
79
|
+
tap_time = touch.time_start - double_tap.time_start
|
|
80
|
+
touch.double_tap_time = tap_time
|
|
81
|
+
distance = double_tap.double_tap_distance
|
|
82
|
+
touch.double_tap_distance = distance
|
|
83
|
+
|
|
84
|
+
# add the touch internally
|
|
85
|
+
self.touches[touch.uid] = (etype, touch)
|
|
86
|
+
|
|
87
|
+
# second, check if up-touch is timeout for double tap
|
|
88
|
+
time_current = time()
|
|
89
|
+
to_delete = []
|
|
90
|
+
for touchid in self.touches.keys():
|
|
91
|
+
etype, touch = self.touches[touchid]
|
|
92
|
+
if etype != 'end':
|
|
93
|
+
continue
|
|
94
|
+
if time_current - touch.time_start < self.double_tap_time:
|
|
95
|
+
continue
|
|
96
|
+
to_delete.append(touchid)
|
|
97
|
+
|
|
98
|
+
for touchid in to_delete:
|
|
99
|
+
del self.touches[touchid]
|
|
100
|
+
|
|
101
|
+
return events
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Ignore list
|
|
3
|
+
===========
|
|
4
|
+
|
|
5
|
+
Ignore touch on some areas of the screen
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('InputPostprocIgnoreList', )
|
|
9
|
+
|
|
10
|
+
from kivy.config import Config
|
|
11
|
+
from kivy.utils import strtotuple
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InputPostprocIgnoreList(object):
|
|
15
|
+
'''
|
|
16
|
+
InputPostprocIgnoreList is a post-processor which removes touches in the
|
|
17
|
+
Ignore list. The Ignore list can be configured in the Kivy config file::
|
|
18
|
+
|
|
19
|
+
[postproc]
|
|
20
|
+
# Format: [(xmin, ymin, xmax, ymax), ...]
|
|
21
|
+
ignore = [(0.1, 0.1, 0.15, 0.15)]
|
|
22
|
+
|
|
23
|
+
The Ignore list coordinates are in the range 0-1, not in screen pixels.
|
|
24
|
+
'''
|
|
25
|
+
|
|
26
|
+
def __init__(self):
|
|
27
|
+
self.ignore_list = strtotuple(Config.get('postproc', 'ignore'))
|
|
28
|
+
|
|
29
|
+
def collide_ignore(self, touch):
|
|
30
|
+
x, y = touch.sx, touch.sy
|
|
31
|
+
for l in self.ignore_list:
|
|
32
|
+
xmin, ymin, xmax, ymax = l
|
|
33
|
+
if x > xmin and x < xmax and y > ymin and y < ymax:
|
|
34
|
+
return True
|
|
35
|
+
|
|
36
|
+
def process(self, events):
|
|
37
|
+
if not len(self.ignore_list):
|
|
38
|
+
return events
|
|
39
|
+
for etype, touch in events:
|
|
40
|
+
if not touch.is_touch:
|
|
41
|
+
continue
|
|
42
|
+
if etype != 'begin':
|
|
43
|
+
continue
|
|
44
|
+
if self.collide_ignore(touch):
|
|
45
|
+
touch.ud.__pp_ignore__ = True
|
|
46
|
+
return [(etype, touch) for etype, touch in events
|
|
47
|
+
if '__pp_ignore__' not in touch.ud]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Retain Touch
|
|
3
|
+
============
|
|
4
|
+
|
|
5
|
+
Reuse touch to counter lost finger behavior
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('InputPostprocRetainTouch', )
|
|
9
|
+
|
|
10
|
+
from kivy.config import Config
|
|
11
|
+
from kivy.vector import Vector
|
|
12
|
+
import time
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InputPostprocRetainTouch(object):
|
|
16
|
+
'''
|
|
17
|
+
InputPostprocRetainTouch is a post-processor to delay the 'up' event of a
|
|
18
|
+
touch, to reuse it under certains conditions. This module is designed to
|
|
19
|
+
prevent lost finger touches on some hardware/setups.
|
|
20
|
+
|
|
21
|
+
Retain touch can be configured in the Kivy config file::
|
|
22
|
+
|
|
23
|
+
[postproc]
|
|
24
|
+
retain_time = 100
|
|
25
|
+
retain_distance = 50
|
|
26
|
+
|
|
27
|
+
The distance parameter is in the range 0-1000 and time is in milliseconds.
|
|
28
|
+
'''
|
|
29
|
+
|
|
30
|
+
def __init__(self):
|
|
31
|
+
self.timeout = Config.getint('postproc', 'retain_time') / 1000.0
|
|
32
|
+
self.distance = Config.getint('postproc', 'retain_distance') / 1000.0
|
|
33
|
+
self._available = []
|
|
34
|
+
self._links = {}
|
|
35
|
+
|
|
36
|
+
def process(self, events):
|
|
37
|
+
# check if module is disabled
|
|
38
|
+
if self.timeout == 0:
|
|
39
|
+
return events
|
|
40
|
+
|
|
41
|
+
d = time.time()
|
|
42
|
+
for etype, touch in events[:]:
|
|
43
|
+
if not touch.is_touch:
|
|
44
|
+
continue
|
|
45
|
+
if etype == 'end':
|
|
46
|
+
events.remove((etype, touch))
|
|
47
|
+
if touch.uid in self._links:
|
|
48
|
+
selection = self._links[touch.uid]
|
|
49
|
+
selection.ud.__pp_retain_time__ = d
|
|
50
|
+
self._available.append(selection)
|
|
51
|
+
del self._links[touch.uid]
|
|
52
|
+
else:
|
|
53
|
+
touch.ud.__pp_retain_time__ = d
|
|
54
|
+
self._available.append(touch)
|
|
55
|
+
elif etype == 'update':
|
|
56
|
+
if touch.uid in self._links:
|
|
57
|
+
selection = self._links[touch.uid]
|
|
58
|
+
selection.x = touch.x
|
|
59
|
+
selection.y = touch.y
|
|
60
|
+
selection.sx = touch.sx
|
|
61
|
+
selection.sy = touch.sy
|
|
62
|
+
events.remove((etype, touch))
|
|
63
|
+
events.append((etype, selection))
|
|
64
|
+
else:
|
|
65
|
+
pass
|
|
66
|
+
elif etype == 'begin':
|
|
67
|
+
# new touch, found the nearest one
|
|
68
|
+
selection = None
|
|
69
|
+
selection_distance = 99999
|
|
70
|
+
for touch2 in self._available:
|
|
71
|
+
touch_distance = Vector(touch2.spos).distance(touch.spos)
|
|
72
|
+
if touch_distance > self.distance:
|
|
73
|
+
continue
|
|
74
|
+
if touch2.__class__ != touch.__class__:
|
|
75
|
+
continue
|
|
76
|
+
if touch_distance < selection_distance:
|
|
77
|
+
# eligible for continuation
|
|
78
|
+
selection_distance = touch_distance
|
|
79
|
+
selection = touch2
|
|
80
|
+
if selection is None:
|
|
81
|
+
continue
|
|
82
|
+
|
|
83
|
+
self._links[touch.uid] = selection
|
|
84
|
+
self._available.remove(selection)
|
|
85
|
+
events.remove((etype, touch))
|
|
86
|
+
|
|
87
|
+
for touch in self._available[:]:
|
|
88
|
+
t = touch.ud.__pp_retain_time__
|
|
89
|
+
if d - t > self.timeout:
|
|
90
|
+
self._available.remove(touch)
|
|
91
|
+
events.append(('end', touch))
|
|
92
|
+
|
|
93
|
+
return events
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Triple Tap
|
|
3
|
+
==========
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.7.0
|
|
6
|
+
|
|
7
|
+
Search touch for a triple tap
|
|
8
|
+
'''
|
|
9
|
+
|
|
10
|
+
__all__ = ('InputPostprocTripleTap', )
|
|
11
|
+
|
|
12
|
+
from time import time
|
|
13
|
+
from kivy.config import Config
|
|
14
|
+
from kivy.vector import Vector
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class InputPostprocTripleTap(object):
|
|
18
|
+
'''
|
|
19
|
+
InputPostProcTripleTap is a post-processor to check if
|
|
20
|
+
a touch is a triple tap or not.
|
|
21
|
+
Triple tap can be configured in the Kivy config file::
|
|
22
|
+
|
|
23
|
+
[postproc]
|
|
24
|
+
triple_tap_time = 250
|
|
25
|
+
triple_tap_distance = 20
|
|
26
|
+
|
|
27
|
+
The distance parameter is in the range 0-1000 and time is in milliseconds.
|
|
28
|
+
'''
|
|
29
|
+
|
|
30
|
+
def __init__(self):
|
|
31
|
+
dist = Config.getint('postproc', 'triple_tap_distance')
|
|
32
|
+
self.triple_tap_distance = dist / 1000.0
|
|
33
|
+
time = Config.getint('postproc', 'triple_tap_time')
|
|
34
|
+
self.triple_tap_time = time / 1000.0
|
|
35
|
+
self.touches = {}
|
|
36
|
+
|
|
37
|
+
def find_triple_tap(self, ref):
|
|
38
|
+
'''Find a triple tap touch within *self.touches*.
|
|
39
|
+
The touch must be not be a previous triple tap and the distance
|
|
40
|
+
must be within the bounds specified. Additionally, the touch profile
|
|
41
|
+
must be the same kind of touch.
|
|
42
|
+
'''
|
|
43
|
+
ref_button = None
|
|
44
|
+
if 'button' in ref.profile:
|
|
45
|
+
ref_button = ref.button
|
|
46
|
+
|
|
47
|
+
for touchid in self.touches:
|
|
48
|
+
if ref.uid == touchid:
|
|
49
|
+
continue
|
|
50
|
+
etype, touch = self.touches[touchid]
|
|
51
|
+
if not touch.is_double_tap:
|
|
52
|
+
continue
|
|
53
|
+
if etype != 'end':
|
|
54
|
+
continue
|
|
55
|
+
if touch.is_triple_tap:
|
|
56
|
+
continue
|
|
57
|
+
distance = Vector.distance(
|
|
58
|
+
Vector(ref.sx, ref.sy),
|
|
59
|
+
Vector(touch.osx, touch.osy))
|
|
60
|
+
if distance > self.triple_tap_distance:
|
|
61
|
+
continue
|
|
62
|
+
if touch.is_mouse_scrolling or ref.is_mouse_scrolling:
|
|
63
|
+
continue
|
|
64
|
+
touch_button = None
|
|
65
|
+
if 'button' in touch.profile:
|
|
66
|
+
touch_button = touch.button
|
|
67
|
+
if touch_button != ref_button:
|
|
68
|
+
continue
|
|
69
|
+
touch.triple_tap_distance = distance
|
|
70
|
+
return touch
|
|
71
|
+
|
|
72
|
+
def process(self, events):
|
|
73
|
+
if self.triple_tap_distance == 0 or self.triple_tap_time == 0:
|
|
74
|
+
return events
|
|
75
|
+
# first, check if a touch down have a triple tap
|
|
76
|
+
for etype, touch in events:
|
|
77
|
+
if not touch.is_touch:
|
|
78
|
+
continue
|
|
79
|
+
if etype == 'begin':
|
|
80
|
+
triple_tap = self.find_triple_tap(touch)
|
|
81
|
+
if triple_tap:
|
|
82
|
+
touch.is_double_tap = False
|
|
83
|
+
touch.is_triple_tap = True
|
|
84
|
+
tap_time = touch.time_start - triple_tap.time_start
|
|
85
|
+
touch.triple_tap_time = tap_time
|
|
86
|
+
distance = triple_tap.triple_tap_distance
|
|
87
|
+
touch.triple_tap_distance = distance
|
|
88
|
+
|
|
89
|
+
# add the touch internally
|
|
90
|
+
self.touches[touch.uid] = (etype, touch)
|
|
91
|
+
|
|
92
|
+
# second, check if up-touch is timeout for triple tap
|
|
93
|
+
time_current = time()
|
|
94
|
+
to_delete = []
|
|
95
|
+
for touchid in self.touches.keys():
|
|
96
|
+
etype, touch = self.touches[touchid]
|
|
97
|
+
if etype != 'end':
|
|
98
|
+
continue
|
|
99
|
+
if time_current - touch.time_start < self.triple_tap_time:
|
|
100
|
+
continue
|
|
101
|
+
to_delete.append(touchid)
|
|
102
|
+
|
|
103
|
+
for touchid in to_delete:
|
|
104
|
+
del self.touches[touchid]
|
|
105
|
+
|
|
106
|
+
return events
|
kivy/input/provider.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Motion Event Provider
|
|
3
|
+
=====================
|
|
4
|
+
|
|
5
|
+
Abstract class for the implementation of a
|
|
6
|
+
:class:`~kivy.input.motionevent.MotionEvent`
|
|
7
|
+
provider. The implementation must support the
|
|
8
|
+
:meth:`~MotionEventProvider.start`, :meth:`~MotionEventProvider.stop` and
|
|
9
|
+
:meth:`~MotionEventProvider.update` methods.
|
|
10
|
+
'''
|
|
11
|
+
|
|
12
|
+
__all__ = ('MotionEventProvider', )
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class MotionEventProvider(object):
|
|
16
|
+
'''Base class for a provider.
|
|
17
|
+
'''
|
|
18
|
+
|
|
19
|
+
def __init__(self, device, args):
|
|
20
|
+
self.device = device
|
|
21
|
+
if self.__class__ == MotionEventProvider:
|
|
22
|
+
raise NotImplementedError('class MotionEventProvider is abstract')
|
|
23
|
+
|
|
24
|
+
def start(self):
|
|
25
|
+
'''Start the provider. This method is automatically called when the
|
|
26
|
+
application is started and if the configuration uses the current
|
|
27
|
+
provider.
|
|
28
|
+
'''
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
def stop(self):
|
|
32
|
+
'''Stop the provider.
|
|
33
|
+
'''
|
|
34
|
+
pass
|
|
35
|
+
|
|
36
|
+
def update(self, dispatch_fn):
|
|
37
|
+
'''Update the provider and dispatch all the new touch events though the
|
|
38
|
+
`dispatch_fn` argument.
|
|
39
|
+
'''
|
|
40
|
+
pass
|