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
kivy/input/__init__.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# pylint: disable=W0611
|
|
2
|
+
'''
|
|
3
|
+
Input management
|
|
4
|
+
================
|
|
5
|
+
|
|
6
|
+
Our input system is wide and simple at the same time. We are currently able to
|
|
7
|
+
natively support :
|
|
8
|
+
|
|
9
|
+
* Windows multitouch events (pencil and finger)
|
|
10
|
+
* OS X touchpads
|
|
11
|
+
* Linux multitouch events (kernel and mtdev)
|
|
12
|
+
* Linux wacom drivers (pencil and finger)
|
|
13
|
+
* TUIO
|
|
14
|
+
|
|
15
|
+
All the input management is configurable in the Kivy :mod:`~kivy.config`. You
|
|
16
|
+
can easily use many multitouch devices in one Kivy application.
|
|
17
|
+
|
|
18
|
+
When the events have been read from the devices, they are dispatched through
|
|
19
|
+
a post processing module before being sent to your application. We also have
|
|
20
|
+
several default modules for :
|
|
21
|
+
|
|
22
|
+
* Double tap detection
|
|
23
|
+
* Decreasing jittering
|
|
24
|
+
* Decreasing the inaccuracy of touch on "bad" DIY hardware
|
|
25
|
+
* Ignoring regions
|
|
26
|
+
'''
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
from kivy.input.motionevent import MotionEvent
|
|
30
|
+
from kivy.input.postproc import kivy_postproc_modules
|
|
31
|
+
from kivy.input.provider import MotionEventProvider
|
|
32
|
+
from kivy.input.factory import MotionEventFactory
|
|
33
|
+
import kivy.input.providers
|
|
34
|
+
|
|
35
|
+
__all__ = (
|
|
36
|
+
MotionEvent.__name__,
|
|
37
|
+
MotionEventProvider.__name__,
|
|
38
|
+
MotionEventFactory.__name__,
|
|
39
|
+
'kivy_postproc_modules')
|
kivy/input/factory.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Motion Event Factory
|
|
3
|
+
====================
|
|
4
|
+
|
|
5
|
+
Factory of :class:`~kivy.input.motionevent.MotionEvent` providers.
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('MotionEventFactory', )
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class MotionEventFactory:
|
|
12
|
+
'''MotionEvent factory is a class that registers all availables input
|
|
13
|
+
factories. If you create a new input factory, you need to register
|
|
14
|
+
it here::
|
|
15
|
+
|
|
16
|
+
MotionEventFactory.register('myproviderid', MyInputProvider)
|
|
17
|
+
|
|
18
|
+
'''
|
|
19
|
+
__providers__ = {}
|
|
20
|
+
|
|
21
|
+
@staticmethod
|
|
22
|
+
def register(name, classname):
|
|
23
|
+
'''Register a input provider in the database'''
|
|
24
|
+
MotionEventFactory.__providers__[name] = classname
|
|
25
|
+
|
|
26
|
+
@staticmethod
|
|
27
|
+
def list():
|
|
28
|
+
'''Get a list of all available providers'''
|
|
29
|
+
return MotionEventFactory.__providers__
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def get(name):
|
|
33
|
+
'''Get a provider class from the provider id'''
|
|
34
|
+
if name in MotionEventFactory.__providers__:
|
|
35
|
+
return MotionEventFactory.__providers__[name]
|
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
'''
|
|
2
|
+
.. _motionevent:
|
|
3
|
+
|
|
4
|
+
Motion Event
|
|
5
|
+
============
|
|
6
|
+
|
|
7
|
+
The :class:`MotionEvent` is the base class used for events provided by
|
|
8
|
+
pointing devices (touch and non-touch). This class defines all the properties
|
|
9
|
+
and methods needed to handle 2D and 3D movements but has many more
|
|
10
|
+
capabilities.
|
|
11
|
+
|
|
12
|
+
Usually you would never need to create the :class:`MotionEvent` yourself as
|
|
13
|
+
this is the role of the :mod:`~kivy.input.providers`.
|
|
14
|
+
|
|
15
|
+
Flow of the motion events
|
|
16
|
+
-------------------------
|
|
17
|
+
|
|
18
|
+
1. The :class:`MotionEvent` 's are gathered from input providers by
|
|
19
|
+
:class:`~kivy.base.EventLoopBase`.
|
|
20
|
+
2. Post processing is performed by registered processors
|
|
21
|
+
:mod:`~kivy.input.postproc`.
|
|
22
|
+
3. :class:`~kivy.base.EventLoopBase` dispatches all motion events using
|
|
23
|
+
`on_motion` event to all registered listeners including the
|
|
24
|
+
:class:`~kivy.core.window.WindowBase`.
|
|
25
|
+
4. Once received in :meth:`~kivy.core.window.WindowBase.on_motion` events
|
|
26
|
+
(touch or non-touch) are all registered managers. If a touch event is not
|
|
27
|
+
handled by at least one manager, then it is dispatched through
|
|
28
|
+
:meth:`~kivy.core.window.WindowBase.on_touch_down`,
|
|
29
|
+
:meth:`~kivy.core.window.WindowBase.on_touch_move` and
|
|
30
|
+
:meth:`~kivy.core.window.WindowBase.on_touch_up`.
|
|
31
|
+
5. Widgets receive events in :meth:`~kivy.uix.widget.Widget.on_motion` method
|
|
32
|
+
(if passed by a manager) or on `on_touch_xxx` methods.
|
|
33
|
+
|
|
34
|
+
Motion events and event managers
|
|
35
|
+
--------------------------------
|
|
36
|
+
|
|
37
|
+
A motion event is a touch event if its :attr:`MotionEvent.is_touch` is set to
|
|
38
|
+
`True`. Beside `is_touch` attribute, :attr:`MotionEvent.type_id` can be used to
|
|
39
|
+
check for event's general type. Currently two types are dispatched by
|
|
40
|
+
input providers: "touch" and "hover".
|
|
41
|
+
|
|
42
|
+
Event managers can be used to dispatch any motion event throughout the widget
|
|
43
|
+
tree and a manager uses `type_id` to specify which event types it want to
|
|
44
|
+
receive. See :mod:`~kivy.eventmanager` to learn how to define and register
|
|
45
|
+
an event manager.
|
|
46
|
+
|
|
47
|
+
A manager can also assign a new `type_id` to
|
|
48
|
+
:attr:`MotionEvent.type_id` before dispatching it to the widgets. This useful
|
|
49
|
+
when dispatching a specific event::
|
|
50
|
+
|
|
51
|
+
class MouseTouchManager(EventManagerBase):
|
|
52
|
+
|
|
53
|
+
type_ids = ('touch',)
|
|
54
|
+
|
|
55
|
+
def dispatch(self, etype, me):
|
|
56
|
+
accepted = False
|
|
57
|
+
if me.device == 'mouse':
|
|
58
|
+
me.push() # Save current type_id and other values
|
|
59
|
+
me.type_id = 'mouse_touch'
|
|
60
|
+
self.window.transform_motion_event_2d(me)
|
|
61
|
+
# Dispatch mouse touch event to widgets which registered
|
|
62
|
+
# to receive 'mouse_touch'
|
|
63
|
+
for widget in self.window.children[:]:
|
|
64
|
+
if widget.dispatch('on_motion', etype, me):
|
|
65
|
+
accepted = True
|
|
66
|
+
break
|
|
67
|
+
me.pop() # Restore
|
|
68
|
+
return accepted
|
|
69
|
+
|
|
70
|
+
Listening to a motion event
|
|
71
|
+
---------------------------
|
|
72
|
+
|
|
73
|
+
If you want to receive all motion events, touch or not, you can bind the
|
|
74
|
+
MotionEvent from the :class:`~kivy.core.window.Window` to your own callback::
|
|
75
|
+
|
|
76
|
+
def on_motion(self, etype, me):
|
|
77
|
+
# will receive all motion events.
|
|
78
|
+
pass
|
|
79
|
+
|
|
80
|
+
Window.bind(on_motion=on_motion)
|
|
81
|
+
|
|
82
|
+
You can also listen to changes of the mouse position by watching
|
|
83
|
+
:attr:`~kivy.core.window.WindowBase.mouse_pos`.
|
|
84
|
+
|
|
85
|
+
Profiles
|
|
86
|
+
--------
|
|
87
|
+
|
|
88
|
+
The :class:`MotionEvent` stores device specific information in various
|
|
89
|
+
properties listed in the :attr:`~MotionEvent.profile`.
|
|
90
|
+
For example, you can receive a MotionEvent that has an angle, a fiducial
|
|
91
|
+
ID, or even a shape. You can check the :attr:`~MotionEvent.profile`
|
|
92
|
+
attribute to see what is currently supported by the MotionEvent provider.
|
|
93
|
+
|
|
94
|
+
This is a short list of the profile values supported by default. Please check
|
|
95
|
+
the :attr:`MotionEvent.profile` property to see what profile values are
|
|
96
|
+
available.
|
|
97
|
+
|
|
98
|
+
============== ================================================================
|
|
99
|
+
Profile value Description
|
|
100
|
+
-------------- ----------------------------------------------------------------
|
|
101
|
+
angle 2D angle. Accessed via the `a` property.
|
|
102
|
+
button Mouse button ('left', 'right', 'middle', 'scrollup' or
|
|
103
|
+
'scrolldown'). Accessed via the `button` property.
|
|
104
|
+
markerid Marker or Fiducial ID. Accessed via the `fid` property.
|
|
105
|
+
pos 2D position. Accessed via the `x`, `y` or `pos` properties.
|
|
106
|
+
pos3d 3D position. Accessed via the `x`, `y` or `z` properties.
|
|
107
|
+
pressure Pressure of the contact. Accessed via the `pressure` property.
|
|
108
|
+
shape Contact shape. Accessed via the `shape` property .
|
|
109
|
+
============== ================================================================
|
|
110
|
+
|
|
111
|
+
If you want to know whether the current :class:`MotionEvent` has an angle::
|
|
112
|
+
|
|
113
|
+
def on_touch_move(self, touch):
|
|
114
|
+
if 'angle' in touch.profile:
|
|
115
|
+
print('The touch angle is', touch.a)
|
|
116
|
+
|
|
117
|
+
If you want to select only the fiducials::
|
|
118
|
+
|
|
119
|
+
def on_touch_move(self, touch):
|
|
120
|
+
if 'markerid' not in touch.profile:
|
|
121
|
+
return
|
|
122
|
+
|
|
123
|
+
'''
|
|
124
|
+
|
|
125
|
+
__all__ = ('MotionEvent', )
|
|
126
|
+
|
|
127
|
+
import weakref
|
|
128
|
+
from inspect import isroutine
|
|
129
|
+
from copy import copy
|
|
130
|
+
from time import time
|
|
131
|
+
|
|
132
|
+
from kivy.eventmanager import MODE_DEFAULT_DISPATCH
|
|
133
|
+
from kivy.vector import Vector
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class EnhancedDictionary(dict):
|
|
137
|
+
|
|
138
|
+
def __getattr__(self, attr):
|
|
139
|
+
try:
|
|
140
|
+
return self.__getitem__(attr)
|
|
141
|
+
except KeyError:
|
|
142
|
+
return super(EnhancedDictionary, self).__getattr__(attr)
|
|
143
|
+
|
|
144
|
+
def __setattr__(self, attr, value):
|
|
145
|
+
self.__setitem__(attr, value)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class MotionEventMetaclass(type):
|
|
149
|
+
|
|
150
|
+
def __new__(mcs, name, bases, attrs):
|
|
151
|
+
__attrs__ = []
|
|
152
|
+
for base in bases:
|
|
153
|
+
if hasattr(base, '__attrs__'):
|
|
154
|
+
__attrs__.extend(base.__attrs__)
|
|
155
|
+
if '__attrs__' in attrs:
|
|
156
|
+
__attrs__.extend(attrs['__attrs__'])
|
|
157
|
+
attrs['__attrs__'] = tuple(__attrs__)
|
|
158
|
+
return super(MotionEventMetaclass, mcs).__new__(mcs, name,
|
|
159
|
+
bases, attrs)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
MotionEventBase = MotionEventMetaclass('MotionEvent', (object, ), {})
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class MotionEvent(MotionEventBase):
|
|
166
|
+
'''Abstract class that represents an input event.
|
|
167
|
+
|
|
168
|
+
:Parameters:
|
|
169
|
+
`id`: str
|
|
170
|
+
unique ID of the MotionEvent
|
|
171
|
+
`args`: list
|
|
172
|
+
list of parameters, passed to the depack() function
|
|
173
|
+
'''
|
|
174
|
+
|
|
175
|
+
__uniq_id = 0
|
|
176
|
+
__attrs__ = \
|
|
177
|
+
('device', 'push_attrs', 'push_attrs_stack',
|
|
178
|
+
'is_touch', 'type_id', 'id', 'dispatch_mode', 'shape', 'profile',
|
|
179
|
+
# current position, in 0-1 range
|
|
180
|
+
'sx', 'sy', 'sz',
|
|
181
|
+
# first position set, in 0-1 range
|
|
182
|
+
'osx', 'osy', 'osz',
|
|
183
|
+
# last position set, in 0-1 range
|
|
184
|
+
'psx', 'psy', 'psz',
|
|
185
|
+
# delta from the last position and current one, in 0-1 range
|
|
186
|
+
'dsx', 'dsy', 'dsz',
|
|
187
|
+
# current position, in screen range
|
|
188
|
+
'x', 'y', 'z',
|
|
189
|
+
# first position set, in screen range
|
|
190
|
+
'ox', 'oy', 'oz',
|
|
191
|
+
# last position set, in 0-1 range
|
|
192
|
+
'px', 'py', 'pz',
|
|
193
|
+
# delta from the last position and current one, in screen range
|
|
194
|
+
'dx', 'dy', 'dz',
|
|
195
|
+
'time_start',
|
|
196
|
+
'is_double_tap', 'double_tap_time',
|
|
197
|
+
'is_triple_tap', 'triple_tap_time',
|
|
198
|
+
'ud')
|
|
199
|
+
|
|
200
|
+
def __init__(self, device, id, args, is_touch=False, type_id=None):
|
|
201
|
+
if self.__class__ == MotionEvent:
|
|
202
|
+
raise NotImplementedError('class MotionEvent is abstract')
|
|
203
|
+
MotionEvent.__uniq_id += 1
|
|
204
|
+
|
|
205
|
+
#: True if the MotionEvent is a touch.
|
|
206
|
+
self.is_touch = is_touch
|
|
207
|
+
|
|
208
|
+
#: (Experimental) String to identify event type.
|
|
209
|
+
#:
|
|
210
|
+
#: .. versionadded:: 2.1.0
|
|
211
|
+
self.type_id = type_id
|
|
212
|
+
|
|
213
|
+
#: (Experimental) Used by a event manager or a widget to assign
|
|
214
|
+
#: the dispatching mode. Defaults to
|
|
215
|
+
#: :const:`~kivy.eventmanager.MODE_DEFAULT_DISPATCH`. See
|
|
216
|
+
#: :mod:`~kivy.eventmanager` for available modes.
|
|
217
|
+
#:
|
|
218
|
+
#: .. versionadded:: 2.1.0
|
|
219
|
+
self.dispatch_mode = MODE_DEFAULT_DISPATCH
|
|
220
|
+
|
|
221
|
+
#: Attributes to push by default, when we use :meth:`push` : x, y, z,
|
|
222
|
+
#: dx, dy, dz, ox, oy, oz, px, py, pz.
|
|
223
|
+
self.push_attrs_stack = []
|
|
224
|
+
self.push_attrs = ('x', 'y', 'z', 'dx', 'dy', 'dz', 'ox', 'oy', 'oz',
|
|
225
|
+
'px', 'py', 'pz', 'pos', 'type_id', 'dispatch_mode')
|
|
226
|
+
|
|
227
|
+
#: Uniq ID of the event. You can safely use this property, it will be
|
|
228
|
+
#: never the same across all existing events.
|
|
229
|
+
self.uid = MotionEvent.__uniq_id
|
|
230
|
+
|
|
231
|
+
#: Device used for creating this event.
|
|
232
|
+
self.device = device
|
|
233
|
+
|
|
234
|
+
# For grab
|
|
235
|
+
self.grab_list = []
|
|
236
|
+
self.grab_exclusive_class = None
|
|
237
|
+
self.grab_state = False
|
|
238
|
+
|
|
239
|
+
#: Used to determine which widget the event is being dispatched to.
|
|
240
|
+
#: Check the :meth:`grab` function for more information.
|
|
241
|
+
self.grab_current = None
|
|
242
|
+
|
|
243
|
+
#: Currently pressed button.
|
|
244
|
+
self.button = None
|
|
245
|
+
|
|
246
|
+
#: Profiles currently used in the event.
|
|
247
|
+
self.profile = []
|
|
248
|
+
|
|
249
|
+
#: Id of the event, not unique. This is generally the Id set by the
|
|
250
|
+
#: input provider, like ID in TUIO. If you have multiple TUIO sources,
|
|
251
|
+
#: then same id can be used. Prefer to use :attr:`uid` attribute
|
|
252
|
+
#: instead.
|
|
253
|
+
self.id = id
|
|
254
|
+
|
|
255
|
+
#: Shape of the touch event, subclass of
|
|
256
|
+
#: :class:`~kivy.input.shape.Shape`.
|
|
257
|
+
#: By default, the property is set to None.
|
|
258
|
+
self.shape = None
|
|
259
|
+
|
|
260
|
+
#: X position, in 0-1 range.
|
|
261
|
+
self.sx = 0.0
|
|
262
|
+
#: Y position, in 0-1 range.
|
|
263
|
+
self.sy = 0.0
|
|
264
|
+
#: Z position, in 0-1 range.
|
|
265
|
+
self.sz = 0.0
|
|
266
|
+
#: Origin X position, in 0-1 range.
|
|
267
|
+
self.osx = None
|
|
268
|
+
#: Origin Y position, in 0-1 range.
|
|
269
|
+
self.osy = None
|
|
270
|
+
#: Origin Z position, in 0-1 range.
|
|
271
|
+
self.osz = None
|
|
272
|
+
#: Previous X position, in 0-1 range.
|
|
273
|
+
self.psx = None
|
|
274
|
+
#: Previous Y position, in 0-1 range.
|
|
275
|
+
self.psy = None
|
|
276
|
+
#: Previous Z position, in 0-1 range.
|
|
277
|
+
self.psz = None
|
|
278
|
+
#: Delta between self.sx and self.psx, in 0-1 range.
|
|
279
|
+
self.dsx = None
|
|
280
|
+
#: Delta between self.sy and self.psy, in 0-1 range.
|
|
281
|
+
self.dsy = None
|
|
282
|
+
#: Delta between self.sz and self.psz, in 0-1 range.
|
|
283
|
+
self.dsz = None
|
|
284
|
+
#: X position, in window range.
|
|
285
|
+
self.x = 0.0
|
|
286
|
+
#: Y position, in window range.
|
|
287
|
+
self.y = 0.0
|
|
288
|
+
#: Z position, in window range.
|
|
289
|
+
self.z = 0.0
|
|
290
|
+
#: Origin X position, in window range.
|
|
291
|
+
self.ox = None
|
|
292
|
+
#: Origin Y position, in window range.
|
|
293
|
+
self.oy = None
|
|
294
|
+
#: Origin Z position, in window range.
|
|
295
|
+
self.oz = None
|
|
296
|
+
#: Previous X position, in window range.
|
|
297
|
+
self.px = None
|
|
298
|
+
#: Previous Y position, in window range.
|
|
299
|
+
self.py = None
|
|
300
|
+
#: Previous Z position, in window range.
|
|
301
|
+
self.pz = None
|
|
302
|
+
#: Delta between self.x and self.px, in window range.
|
|
303
|
+
self.dx = None
|
|
304
|
+
#: Delta between self.y and self.py, in window range.
|
|
305
|
+
self.dy = None
|
|
306
|
+
#: Delta between self.z and self.pz, in window range.
|
|
307
|
+
self.dz = None
|
|
308
|
+
#: Position (X, Y), in window range.
|
|
309
|
+
self.pos = (0.0, 0.0)
|
|
310
|
+
|
|
311
|
+
#: Initial time of the event creation.
|
|
312
|
+
self.time_start = time()
|
|
313
|
+
|
|
314
|
+
#: Time of the last update.
|
|
315
|
+
self.time_update = self.time_start
|
|
316
|
+
|
|
317
|
+
#: Time of the end event (last event usage).
|
|
318
|
+
self.time_end = -1
|
|
319
|
+
|
|
320
|
+
#: Indicate if the touch event is a double tap or not.
|
|
321
|
+
self.is_double_tap = False
|
|
322
|
+
|
|
323
|
+
#: Indicate if the touch event is a triple tap or not.
|
|
324
|
+
#:
|
|
325
|
+
#: .. versionadded:: 1.7.0
|
|
326
|
+
self.is_triple_tap = False
|
|
327
|
+
|
|
328
|
+
#: If the touch is a :attr:`is_double_tap`, this is the time
|
|
329
|
+
#: between the previous tap and the current touch.
|
|
330
|
+
self.double_tap_time = 0
|
|
331
|
+
|
|
332
|
+
#: If the touch is a :attr:`is_triple_tap`, this is the time
|
|
333
|
+
#: between the first tap and the current touch.
|
|
334
|
+
#:
|
|
335
|
+
#: .. versionadded:: 1.7.0
|
|
336
|
+
self.triple_tap_time = 0
|
|
337
|
+
|
|
338
|
+
#: User data dictionary. Use this dictionary to save your own data on
|
|
339
|
+
#: the event.
|
|
340
|
+
self.ud = EnhancedDictionary()
|
|
341
|
+
|
|
342
|
+
#: If set to `True` (default) keeps first previous position
|
|
343
|
+
#: (X, Y, Z in 0-1 range) and ignore all other until
|
|
344
|
+
#: :meth:`MotionEvent.dispatch_done` is called from the `EventLoop`.
|
|
345
|
+
#:
|
|
346
|
+
#: This attribute is needed because event provider can make many calls
|
|
347
|
+
#: to :meth:`MotionEvent.move`, but for all those calls event is
|
|
348
|
+
#: dispatched to the listeners only once. Assigning `False` will keep
|
|
349
|
+
#: latest previous position. See :meth:`MotionEvent.move`.
|
|
350
|
+
#:
|
|
351
|
+
#: .. versionadded:: 2.1.0
|
|
352
|
+
self.sync_with_dispatch = True
|
|
353
|
+
|
|
354
|
+
#: Keep first previous position if :attr:`sync_with_dispatch` is
|
|
355
|
+
#: `True`.
|
|
356
|
+
self._keep_prev_pos = True
|
|
357
|
+
|
|
358
|
+
#: Flag that first dispatch of this event is done.
|
|
359
|
+
self._first_dispatch_done = False
|
|
360
|
+
|
|
361
|
+
self.depack(args)
|
|
362
|
+
|
|
363
|
+
def depack(self, args):
|
|
364
|
+
'''Depack `args` into attributes of the class'''
|
|
365
|
+
if self.osx is None \
|
|
366
|
+
or self.sync_with_dispatch and not self._first_dispatch_done:
|
|
367
|
+
# Sync origin/previous/current positions until the first
|
|
368
|
+
# dispatch (etype == 'begin') is done.
|
|
369
|
+
self.osx = self.psx = self.sx
|
|
370
|
+
self.osy = self.psy = self.sy
|
|
371
|
+
self.osz = self.psz = self.sz
|
|
372
|
+
# update the delta
|
|
373
|
+
self.dsx = self.sx - self.psx
|
|
374
|
+
self.dsy = self.sy - self.psy
|
|
375
|
+
self.dsz = self.sz - self.psz
|
|
376
|
+
|
|
377
|
+
def grab(self, class_instance, exclusive=False):
|
|
378
|
+
'''Grab this motion event.
|
|
379
|
+
|
|
380
|
+
If this event is a touch you can grab it if you want to receive
|
|
381
|
+
subsequent :meth:`~kivy.uix.widget.Widget.on_touch_move` and
|
|
382
|
+
:meth:`~kivy.uix.widget.Widget.on_touch_up` events, even if the touch
|
|
383
|
+
is not dispatched by the parent:
|
|
384
|
+
|
|
385
|
+
.. code-block:: python
|
|
386
|
+
|
|
387
|
+
def on_touch_down(self, touch):
|
|
388
|
+
touch.grab(self)
|
|
389
|
+
|
|
390
|
+
def on_touch_move(self, touch):
|
|
391
|
+
if touch.grab_current is self:
|
|
392
|
+
# I received my grabbed touch
|
|
393
|
+
else:
|
|
394
|
+
# it's a normal touch
|
|
395
|
+
|
|
396
|
+
def on_touch_up(self, touch):
|
|
397
|
+
if touch.grab_current is self:
|
|
398
|
+
# I receive my grabbed touch, I must ungrab it!
|
|
399
|
+
touch.ungrab(self)
|
|
400
|
+
else:
|
|
401
|
+
# it's a normal touch
|
|
402
|
+
pass
|
|
403
|
+
|
|
404
|
+
.. versionchanged:: 2.1.0
|
|
405
|
+
Allowed grab for non-touch events.
|
|
406
|
+
'''
|
|
407
|
+
if self.grab_exclusive_class is not None:
|
|
408
|
+
raise Exception('Event is exclusive and cannot be grabbed')
|
|
409
|
+
class_instance = weakref.ref(class_instance.__self__)
|
|
410
|
+
if exclusive:
|
|
411
|
+
self.grab_exclusive_class = class_instance
|
|
412
|
+
self.grab_list.append(class_instance)
|
|
413
|
+
|
|
414
|
+
def ungrab(self, class_instance):
|
|
415
|
+
'''Ungrab a previously grabbed motion event.
|
|
416
|
+
'''
|
|
417
|
+
class_instance = weakref.ref(class_instance.__self__)
|
|
418
|
+
if self.grab_exclusive_class == class_instance:
|
|
419
|
+
self.grab_exclusive_class = None
|
|
420
|
+
if class_instance in self.grab_list:
|
|
421
|
+
self.grab_list.remove(class_instance)
|
|
422
|
+
|
|
423
|
+
def dispatch_done(self):
|
|
424
|
+
'''Notify that dispatch to the listeners is done.
|
|
425
|
+
|
|
426
|
+
Called by the :meth:`EventLoopBase.post_dispatch_input`.
|
|
427
|
+
|
|
428
|
+
.. versionadded:: 2.1.0
|
|
429
|
+
'''
|
|
430
|
+
self._keep_prev_pos = True
|
|
431
|
+
self._first_dispatch_done = True
|
|
432
|
+
|
|
433
|
+
def move(self, args):
|
|
434
|
+
'''Move to another position.
|
|
435
|
+
'''
|
|
436
|
+
if self.sync_with_dispatch:
|
|
437
|
+
if self._keep_prev_pos:
|
|
438
|
+
self.psx, self.psy, self.psz = self.sx, self.sy, self.sz
|
|
439
|
+
self._keep_prev_pos = False
|
|
440
|
+
else:
|
|
441
|
+
self.psx, self.psy, self.psz = self.sx, self.sy, self.sz
|
|
442
|
+
self.time_update = time()
|
|
443
|
+
self.depack(args)
|
|
444
|
+
|
|
445
|
+
def scale_for_screen(self, w, h, p=None, rotation=0,
|
|
446
|
+
smode='None', kheight=0):
|
|
447
|
+
'''Scale position for the screen.
|
|
448
|
+
|
|
449
|
+
.. versionchanged:: 2.1.0
|
|
450
|
+
Max value for `x`, `y` and `z` is changed respectively to `w` - 1,
|
|
451
|
+
`h` - 1 and `p` - 1.
|
|
452
|
+
'''
|
|
453
|
+
x_max, y_max = max(0, w - 1), max(0, h - 1)
|
|
454
|
+
absolute = self.to_absolute_pos
|
|
455
|
+
self.x, self.y = absolute(self.sx, self.sy, x_max, y_max, rotation)
|
|
456
|
+
self.ox, self.oy = absolute(self.osx, self.osy, x_max, y_max, rotation)
|
|
457
|
+
self.px, self.py = absolute(self.psx, self.psy, x_max, y_max, rotation)
|
|
458
|
+
z_max = 0 if p is None else max(0, p - 1)
|
|
459
|
+
self.z = self.sz * z_max
|
|
460
|
+
self.oz = self.osz * z_max
|
|
461
|
+
self.pz = self.psz * z_max
|
|
462
|
+
if smode:
|
|
463
|
+
# Adjust y for keyboard height
|
|
464
|
+
if smode == 'pan' or smode == 'below_target':
|
|
465
|
+
self.y -= kheight
|
|
466
|
+
self.oy -= kheight
|
|
467
|
+
self.py -= kheight
|
|
468
|
+
elif smode == 'scale':
|
|
469
|
+
offset = kheight * (self.y - h) / (h - kheight)
|
|
470
|
+
self.y += offset
|
|
471
|
+
self.oy += offset
|
|
472
|
+
self.py += offset
|
|
473
|
+
# Update delta values
|
|
474
|
+
self.dx = self.x - self.px
|
|
475
|
+
self.dy = self.y - self.py
|
|
476
|
+
self.dz = self.z - self.pz
|
|
477
|
+
# Cache position
|
|
478
|
+
self.pos = self.x, self.y
|
|
479
|
+
|
|
480
|
+
def to_absolute_pos(self, nx, ny, x_max, y_max, rotation):
|
|
481
|
+
'''Transforms normalized (0-1) coordinates `nx` and `ny` to absolute
|
|
482
|
+
coordinates using `x_max`, `y_max` and `rotation`.
|
|
483
|
+
|
|
484
|
+
:raises:
|
|
485
|
+
`ValueError`: If `rotation` is not one of: 0, 90, 180 or 270
|
|
486
|
+
|
|
487
|
+
.. versionadded:: 2.1.0
|
|
488
|
+
'''
|
|
489
|
+
if rotation == 0:
|
|
490
|
+
return nx * x_max, ny * y_max
|
|
491
|
+
elif rotation == 90:
|
|
492
|
+
return ny * y_max, (1 - nx) * x_max
|
|
493
|
+
elif rotation == 180:
|
|
494
|
+
return (1 - nx) * x_max, (1 - ny) * y_max
|
|
495
|
+
elif rotation == 270:
|
|
496
|
+
return (1 - ny) * y_max, nx * x_max
|
|
497
|
+
raise ValueError('Invalid rotation %s, '
|
|
498
|
+
'valid values are 0, 90, 180 or 270' % rotation)
|
|
499
|
+
|
|
500
|
+
def push(self, attrs=None):
|
|
501
|
+
'''Push attribute values in `attrs` onto the stack.
|
|
502
|
+
'''
|
|
503
|
+
if attrs is None:
|
|
504
|
+
attrs = self.push_attrs
|
|
505
|
+
values = [getattr(self, x) for x in attrs]
|
|
506
|
+
self.push_attrs_stack.append((attrs, values))
|
|
507
|
+
|
|
508
|
+
def pop(self):
|
|
509
|
+
'''Pop attributes values from the stack.
|
|
510
|
+
'''
|
|
511
|
+
attrs, values = self.push_attrs_stack.pop()
|
|
512
|
+
for i in range(len(attrs)):
|
|
513
|
+
setattr(self, attrs[i], values[i])
|
|
514
|
+
|
|
515
|
+
def apply_transform_2d(self, transform):
|
|
516
|
+
'''Apply a transformation on x, y, z, px, py, pz,
|
|
517
|
+
ox, oy, oz, dx, dy, dz.
|
|
518
|
+
'''
|
|
519
|
+
self.x, self.y = self.pos = transform(self.x, self.y)
|
|
520
|
+
self.px, self.py = transform(self.px, self.py)
|
|
521
|
+
self.ox, self.oy = transform(self.ox, self.oy)
|
|
522
|
+
self.dx = self.x - self.px
|
|
523
|
+
self.dy = self.y - self.py
|
|
524
|
+
|
|
525
|
+
def copy_to(self, to):
|
|
526
|
+
'''Copy some attribute to another motion event object.'''
|
|
527
|
+
for attr in self.__attrs__:
|
|
528
|
+
to.__setattr__(attr, copy(self.__getattribute__(attr)))
|
|
529
|
+
|
|
530
|
+
def distance(self, other_touch):
|
|
531
|
+
'''Return the distance between the two events.
|
|
532
|
+
'''
|
|
533
|
+
return Vector(self.pos).distance(other_touch.pos)
|
|
534
|
+
|
|
535
|
+
def update_time_end(self):
|
|
536
|
+
self.time_end = time()
|
|
537
|
+
|
|
538
|
+
# facilities
|
|
539
|
+
@property
|
|
540
|
+
def dpos(self):
|
|
541
|
+
'''Return delta between last position and current position, in the
|
|
542
|
+
screen coordinate system (self.dx, self.dy).'''
|
|
543
|
+
return self.dx, self.dy
|
|
544
|
+
|
|
545
|
+
@property
|
|
546
|
+
def opos(self):
|
|
547
|
+
'''Return the initial position of the motion event in the screen
|
|
548
|
+
coordinate system (self.ox, self.oy).'''
|
|
549
|
+
return self.ox, self.oy
|
|
550
|
+
|
|
551
|
+
@property
|
|
552
|
+
def ppos(self):
|
|
553
|
+
'''Return the previous position of the motion event in the screen
|
|
554
|
+
coordinate system (self.px, self.py).'''
|
|
555
|
+
return self.px, self.py
|
|
556
|
+
|
|
557
|
+
@property
|
|
558
|
+
def spos(self):
|
|
559
|
+
'''Return the position in the 0-1 coordinate system (self.sx, self.sy).
|
|
560
|
+
'''
|
|
561
|
+
return self.sx, self.sy
|
|
562
|
+
|
|
563
|
+
def __str__(self):
|
|
564
|
+
basename = str(self.__class__)
|
|
565
|
+
classname = basename.split('.')[-1].replace('>', '').replace('\'', '')
|
|
566
|
+
return '<%s spos=%s pos=%s>' % (classname, self.spos, self.pos)
|
|
567
|
+
|
|
568
|
+
def __repr__(self):
|
|
569
|
+
out = []
|
|
570
|
+
for x in dir(self):
|
|
571
|
+
v = getattr(self, x)
|
|
572
|
+
if x[0] == '_':
|
|
573
|
+
continue
|
|
574
|
+
if isroutine(v):
|
|
575
|
+
continue
|
|
576
|
+
out.append('%s="%s"' % (x, v))
|
|
577
|
+
return '<%s %s>' % (
|
|
578
|
+
self.__class__.__name__,
|
|
579
|
+
' '.join(out))
|
|
580
|
+
|
|
581
|
+
@property
|
|
582
|
+
def is_mouse_scrolling(self, *args):
|
|
583
|
+
'''Returns True if the touch event is a mousewheel scrolling
|
|
584
|
+
|
|
585
|
+
.. versionadded:: 1.6.0
|
|
586
|
+
'''
|
|
587
|
+
return 'button' in self.profile and 'scroll' in self.button
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Input Postprocessing
|
|
3
|
+
====================
|
|
4
|
+
|
|
5
|
+
'''
|
|
6
|
+
|
|
7
|
+
__all__ = ('kivy_postproc_modules', )
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
from kivy.input.postproc.doubletap import InputPostprocDoubleTap
|
|
11
|
+
from kivy.input.postproc.tripletap import InputPostprocTripleTap
|
|
12
|
+
from kivy.input.postproc.ignorelist import InputPostprocIgnoreList
|
|
13
|
+
from kivy.input.postproc.retaintouch import InputPostprocRetainTouch
|
|
14
|
+
from kivy.input.postproc.dejitter import InputPostprocDejitter
|
|
15
|
+
from kivy.input.postproc.calibration import InputPostprocCalibration
|
|
16
|
+
|
|
17
|
+
# Mapping of ID to module
|
|
18
|
+
kivy_postproc_modules = {}
|
|
19
|
+
|
|
20
|
+
# Don't go further if we generate documentation
|
|
21
|
+
if 'KIVY_DOC' not in os.environ:
|
|
22
|
+
kivy_postproc_modules['calibration'] = InputPostprocCalibration()
|
|
23
|
+
kivy_postproc_modules['retaintouch'] = InputPostprocRetainTouch()
|
|
24
|
+
kivy_postproc_modules['ignorelist'] = InputPostprocIgnoreList()
|
|
25
|
+
kivy_postproc_modules['doubletap'] = InputPostprocDoubleTap()
|
|
26
|
+
kivy_postproc_modules['tripletap'] = InputPostprocTripleTap()
|
|
27
|
+
kivy_postproc_modules['dejitter'] = InputPostprocDejitter()
|