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/base.py
ADDED
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
# pylint: disable=W0611
|
|
2
|
+
'''
|
|
3
|
+
Kivy Base
|
|
4
|
+
=========
|
|
5
|
+
|
|
6
|
+
This module contains the Kivy core functionality and is not intended for end
|
|
7
|
+
users. Feel free to look through it, but bare in mind that calling any of
|
|
8
|
+
these methods directly may result in an unpredictable behavior as the calls
|
|
9
|
+
access directly the event loop of an application.
|
|
10
|
+
'''
|
|
11
|
+
|
|
12
|
+
__all__ = (
|
|
13
|
+
'EventLoop',
|
|
14
|
+
'EventLoopBase',
|
|
15
|
+
'ExceptionHandler',
|
|
16
|
+
'ExceptionManagerBase',
|
|
17
|
+
'ExceptionManager',
|
|
18
|
+
'runTouchApp',
|
|
19
|
+
'async_runTouchApp',
|
|
20
|
+
'stopTouchApp',
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
import sys
|
|
24
|
+
import os
|
|
25
|
+
from kivy.config import Config
|
|
26
|
+
from kivy.logger import Logger
|
|
27
|
+
from kivy.utils import platform
|
|
28
|
+
from kivy.clock import Clock
|
|
29
|
+
from kivy.event import EventDispatcher
|
|
30
|
+
from kivy.lang import Builder
|
|
31
|
+
from kivy.context import register_context
|
|
32
|
+
|
|
33
|
+
# private vars
|
|
34
|
+
EventLoop = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ExceptionHandler(object):
|
|
38
|
+
'''Base handler that catches exceptions in :func:`runTouchApp`.
|
|
39
|
+
You can subclass and extend it as follows::
|
|
40
|
+
|
|
41
|
+
class E(ExceptionHandler):
|
|
42
|
+
def handle_exception(self, inst):
|
|
43
|
+
Logger.exception('Exception caught by ExceptionHandler')
|
|
44
|
+
return ExceptionManager.PASS
|
|
45
|
+
|
|
46
|
+
ExceptionManager.add_handler(E())
|
|
47
|
+
|
|
48
|
+
Then, all exceptions will be set to PASS, and logged to the console!
|
|
49
|
+
'''
|
|
50
|
+
|
|
51
|
+
def handle_exception(self, exception):
|
|
52
|
+
'''Called by :class:`ExceptionManagerBase` to handle a exception.
|
|
53
|
+
|
|
54
|
+
Defaults to returning :attr:`ExceptionManager.RAISE` that re-raises the
|
|
55
|
+
exception. Return :attr:`ExceptionManager.PASS` to indicate that the
|
|
56
|
+
exception was handled and should be ignored.
|
|
57
|
+
|
|
58
|
+
This may be called multiple times with the same exception, if
|
|
59
|
+
:attr:`ExceptionManager.RAISE` is returned as the exception bubbles
|
|
60
|
+
through multiple kivy exception handling levels.
|
|
61
|
+
'''
|
|
62
|
+
return ExceptionManager.RAISE
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class ExceptionManagerBase:
|
|
66
|
+
'''ExceptionManager manages exceptions handlers.'''
|
|
67
|
+
|
|
68
|
+
RAISE = 0
|
|
69
|
+
"""The exception should be re-raised.
|
|
70
|
+
"""
|
|
71
|
+
PASS = 1
|
|
72
|
+
"""The exception should be ignored as it was handled by the handler.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def __init__(self):
|
|
76
|
+
self.handlers = []
|
|
77
|
+
self.policy = ExceptionManagerBase.RAISE
|
|
78
|
+
|
|
79
|
+
def add_handler(self, cls):
|
|
80
|
+
'''Add a new exception handler to the stack.'''
|
|
81
|
+
if cls not in self.handlers:
|
|
82
|
+
self.handlers.append(cls)
|
|
83
|
+
|
|
84
|
+
def remove_handler(self, cls):
|
|
85
|
+
'''Remove the exception handler from the stack.'''
|
|
86
|
+
if cls in self.handlers:
|
|
87
|
+
self.handlers.remove(cls)
|
|
88
|
+
|
|
89
|
+
def handle_exception(self, inst):
|
|
90
|
+
'''Called when an exception occurred in the :func:`runTouchApp`
|
|
91
|
+
main loop.'''
|
|
92
|
+
ret = self.policy
|
|
93
|
+
for handler in self.handlers:
|
|
94
|
+
r = handler.handle_exception(inst)
|
|
95
|
+
if r == ExceptionManagerBase.PASS:
|
|
96
|
+
ret = r
|
|
97
|
+
return ret
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
#: Instance of a :class:`ExceptionManagerBase` implementation.
|
|
101
|
+
ExceptionManager: ExceptionManagerBase = register_context(
|
|
102
|
+
'ExceptionManager', ExceptionManagerBase)
|
|
103
|
+
"""The :class:`ExceptionManagerBase` instance that handles kivy exceptions.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class EventLoopBase(EventDispatcher):
|
|
108
|
+
'''Main event loop. This loop handles the updating of input and
|
|
109
|
+
dispatching events.
|
|
110
|
+
'''
|
|
111
|
+
|
|
112
|
+
__events__ = ('on_start', 'on_pause', 'on_stop')
|
|
113
|
+
|
|
114
|
+
def __init__(self):
|
|
115
|
+
super(EventLoopBase, self).__init__()
|
|
116
|
+
self.quit = False
|
|
117
|
+
self.input_events = []
|
|
118
|
+
self.postproc_modules = []
|
|
119
|
+
self.status = 'idle'
|
|
120
|
+
self.stopping = False
|
|
121
|
+
self.input_providers = []
|
|
122
|
+
self.input_providers_autoremove = []
|
|
123
|
+
self.event_listeners = []
|
|
124
|
+
self.window = None
|
|
125
|
+
self.me_list = []
|
|
126
|
+
|
|
127
|
+
@property
|
|
128
|
+
def touches(self):
|
|
129
|
+
'''Return the list of all touches currently in down or move states.
|
|
130
|
+
'''
|
|
131
|
+
return self.me_list
|
|
132
|
+
|
|
133
|
+
def ensure_window(self):
|
|
134
|
+
'''Ensure that we have a window.
|
|
135
|
+
'''
|
|
136
|
+
import kivy.core.window # NOQA
|
|
137
|
+
if not self.window:
|
|
138
|
+
Logger.critical('App: Unable to get a Window, abort.')
|
|
139
|
+
sys.exit(1)
|
|
140
|
+
|
|
141
|
+
def set_window(self, window):
|
|
142
|
+
'''Set the window used for the event loop.
|
|
143
|
+
'''
|
|
144
|
+
self.window = window
|
|
145
|
+
|
|
146
|
+
def add_input_provider(self, provider, auto_remove=False):
|
|
147
|
+
'''Add a new input provider to listen for touch events.
|
|
148
|
+
'''
|
|
149
|
+
if provider not in self.input_providers:
|
|
150
|
+
self.input_providers.append(provider)
|
|
151
|
+
if auto_remove:
|
|
152
|
+
self.input_providers_autoremove.append(provider)
|
|
153
|
+
|
|
154
|
+
def remove_input_provider(self, provider):
|
|
155
|
+
'''Remove an input provider.
|
|
156
|
+
|
|
157
|
+
.. versionchanged:: 2.1.0
|
|
158
|
+
Provider will be also removed if it exist in auto-remove list.
|
|
159
|
+
'''
|
|
160
|
+
if provider in self.input_providers:
|
|
161
|
+
self.input_providers.remove(provider)
|
|
162
|
+
if provider in self.input_providers_autoremove:
|
|
163
|
+
self.input_providers_autoremove.remove(provider)
|
|
164
|
+
|
|
165
|
+
def add_event_listener(self, listener):
|
|
166
|
+
'''Add a new event listener for getting touch events.
|
|
167
|
+
'''
|
|
168
|
+
if listener not in self.event_listeners:
|
|
169
|
+
self.event_listeners.append(listener)
|
|
170
|
+
|
|
171
|
+
def remove_event_listener(self, listener):
|
|
172
|
+
'''Remove an event listener from the list.
|
|
173
|
+
'''
|
|
174
|
+
if listener in self.event_listeners:
|
|
175
|
+
self.event_listeners.remove(listener)
|
|
176
|
+
|
|
177
|
+
def start(self):
|
|
178
|
+
'''Must be called before :meth:`EventLoopBase.run()`. This starts all
|
|
179
|
+
configured input providers.
|
|
180
|
+
|
|
181
|
+
.. versionchanged:: 2.1.0
|
|
182
|
+
Method can be called multiple times, but event loop will start only
|
|
183
|
+
once.
|
|
184
|
+
'''
|
|
185
|
+
if self.status == 'started':
|
|
186
|
+
return
|
|
187
|
+
self.status = 'started'
|
|
188
|
+
self.quit = False
|
|
189
|
+
Clock.start_clock()
|
|
190
|
+
for provider in self.input_providers:
|
|
191
|
+
provider.start()
|
|
192
|
+
self.dispatch('on_start')
|
|
193
|
+
|
|
194
|
+
def close(self):
|
|
195
|
+
'''Exit from the main loop and stop all configured
|
|
196
|
+
input providers.'''
|
|
197
|
+
self.quit = True
|
|
198
|
+
self.stop()
|
|
199
|
+
self.status = 'closed'
|
|
200
|
+
|
|
201
|
+
def stop(self):
|
|
202
|
+
'''Stop all input providers and call callbacks registered using
|
|
203
|
+
`EventLoop.add_stop_callback()`.
|
|
204
|
+
|
|
205
|
+
.. versionchanged:: 2.1.0
|
|
206
|
+
Method can be called multiple times, but event loop will stop only
|
|
207
|
+
once.
|
|
208
|
+
'''
|
|
209
|
+
if self.status != 'started':
|
|
210
|
+
return
|
|
211
|
+
# XXX stop in reverse order that we started them!! (like push
|
|
212
|
+
# pop), very important because e.g. wm_touch and WM_PEN both
|
|
213
|
+
# store old window proc and the restore, if order is messed big
|
|
214
|
+
# problem happens, crashing badly without error
|
|
215
|
+
for provider in reversed(self.input_providers[:]):
|
|
216
|
+
provider.stop()
|
|
217
|
+
self.remove_input_provider(provider)
|
|
218
|
+
|
|
219
|
+
# ensure any restart will not break anything later.
|
|
220
|
+
self.input_events = []
|
|
221
|
+
|
|
222
|
+
Clock.stop_clock()
|
|
223
|
+
self.stopping = False
|
|
224
|
+
self.status = 'stopped'
|
|
225
|
+
self.dispatch('on_stop')
|
|
226
|
+
|
|
227
|
+
def add_postproc_module(self, mod):
|
|
228
|
+
'''Add a postproc input module (DoubleTap, TripleTap, DeJitter
|
|
229
|
+
RetainTouch are defaults).'''
|
|
230
|
+
if mod not in self.postproc_modules:
|
|
231
|
+
self.postproc_modules.append(mod)
|
|
232
|
+
|
|
233
|
+
def remove_postproc_module(self, mod):
|
|
234
|
+
'''Remove a postproc module.'''
|
|
235
|
+
if mod in self.postproc_modules:
|
|
236
|
+
self.postproc_modules.remove(mod)
|
|
237
|
+
|
|
238
|
+
def remove_android_splash(self, *args):
|
|
239
|
+
'''Remove android presplash in SDL2 bootstrap.'''
|
|
240
|
+
try:
|
|
241
|
+
from android import remove_presplash
|
|
242
|
+
remove_presplash()
|
|
243
|
+
except ImportError:
|
|
244
|
+
Logger.warning(
|
|
245
|
+
'Base: Failed to import "android" module. '
|
|
246
|
+
'Could not remove android presplash.')
|
|
247
|
+
return
|
|
248
|
+
|
|
249
|
+
def post_dispatch_input(self, etype, me):
|
|
250
|
+
'''This function is called by :meth:`EventLoopBase.dispatch_input()`
|
|
251
|
+
when we want to dispatch an input event. The event is dispatched to
|
|
252
|
+
all listeners and if grabbed, it's dispatched to grabbed widgets.
|
|
253
|
+
'''
|
|
254
|
+
# update available list
|
|
255
|
+
if etype == 'begin':
|
|
256
|
+
self.me_list.append(me)
|
|
257
|
+
elif etype == 'end':
|
|
258
|
+
if me in self.me_list:
|
|
259
|
+
self.me_list.remove(me)
|
|
260
|
+
# dispatch to listeners
|
|
261
|
+
if not me.grab_exclusive_class:
|
|
262
|
+
for listener in self.event_listeners:
|
|
263
|
+
listener.dispatch('on_motion', etype, me)
|
|
264
|
+
# dispatch grabbed touch
|
|
265
|
+
if not me.is_touch:
|
|
266
|
+
# Non-touch event must be handled by the event manager
|
|
267
|
+
return
|
|
268
|
+
me.grab_state = True
|
|
269
|
+
for weak_widget in me.grab_list[:]:
|
|
270
|
+
# weak_widget is a weak reference to widget
|
|
271
|
+
wid = weak_widget()
|
|
272
|
+
if wid is None:
|
|
273
|
+
# object is gone, stop.
|
|
274
|
+
me.grab_list.remove(weak_widget)
|
|
275
|
+
continue
|
|
276
|
+
root_window = wid.get_root_window()
|
|
277
|
+
if wid != root_window and root_window is not None:
|
|
278
|
+
me.push()
|
|
279
|
+
try:
|
|
280
|
+
root_window.transform_motion_event_2d(me, wid)
|
|
281
|
+
except AttributeError:
|
|
282
|
+
me.pop()
|
|
283
|
+
continue
|
|
284
|
+
me.grab_current = wid
|
|
285
|
+
wid._context.push()
|
|
286
|
+
if etype == 'begin':
|
|
287
|
+
# don't dispatch again touch in on_touch_down
|
|
288
|
+
# a down event are nearly uniq here.
|
|
289
|
+
# wid.dispatch('on_touch_down', touch)
|
|
290
|
+
pass
|
|
291
|
+
elif etype == 'update':
|
|
292
|
+
if wid._context.sandbox:
|
|
293
|
+
with wid._context.sandbox:
|
|
294
|
+
wid.dispatch('on_touch_move', me)
|
|
295
|
+
else:
|
|
296
|
+
wid.dispatch('on_touch_move', me)
|
|
297
|
+
elif etype == 'end':
|
|
298
|
+
if wid._context.sandbox:
|
|
299
|
+
with wid._context.sandbox:
|
|
300
|
+
wid.dispatch('on_touch_up', me)
|
|
301
|
+
else:
|
|
302
|
+
wid.dispatch('on_touch_up', me)
|
|
303
|
+
wid._context.pop()
|
|
304
|
+
me.grab_current = None
|
|
305
|
+
if wid != root_window and root_window is not None:
|
|
306
|
+
me.pop()
|
|
307
|
+
me.grab_state = False
|
|
308
|
+
me.dispatch_done()
|
|
309
|
+
|
|
310
|
+
def _dispatch_input(self, *ev):
|
|
311
|
+
# remove the save event for the touch if exist
|
|
312
|
+
if ev in self.input_events:
|
|
313
|
+
self.input_events.remove(ev)
|
|
314
|
+
self.input_events.append(ev)
|
|
315
|
+
|
|
316
|
+
def dispatch_input(self):
|
|
317
|
+
'''Called by :meth:`EventLoopBase.idle()` to read events from input
|
|
318
|
+
providers, pass events to postproc, and dispatch final events.
|
|
319
|
+
'''
|
|
320
|
+
|
|
321
|
+
# first, acquire input events
|
|
322
|
+
for provider in self.input_providers:
|
|
323
|
+
provider.update(dispatch_fn=self._dispatch_input)
|
|
324
|
+
|
|
325
|
+
# execute post-processing modules
|
|
326
|
+
for mod in self.postproc_modules:
|
|
327
|
+
self.input_events = mod.process(events=self.input_events)
|
|
328
|
+
|
|
329
|
+
# real dispatch input
|
|
330
|
+
input_events = self.input_events
|
|
331
|
+
pop = input_events.pop
|
|
332
|
+
post_dispatch_input = self.post_dispatch_input
|
|
333
|
+
while input_events:
|
|
334
|
+
post_dispatch_input(*pop(0))
|
|
335
|
+
|
|
336
|
+
def mainloop(self):
|
|
337
|
+
while not self.quit and self.status == 'started':
|
|
338
|
+
try:
|
|
339
|
+
self.idle()
|
|
340
|
+
if self.window:
|
|
341
|
+
self.window.mainloop()
|
|
342
|
+
except BaseException as inst:
|
|
343
|
+
# use exception manager first
|
|
344
|
+
r = ExceptionManager.handle_exception(inst)
|
|
345
|
+
if r == ExceptionManager.RAISE:
|
|
346
|
+
stopTouchApp()
|
|
347
|
+
raise
|
|
348
|
+
else:
|
|
349
|
+
pass
|
|
350
|
+
|
|
351
|
+
async def async_mainloop(self):
|
|
352
|
+
while not self.quit and self.status == 'started':
|
|
353
|
+
try:
|
|
354
|
+
await self.async_idle()
|
|
355
|
+
if self.window:
|
|
356
|
+
self.window.mainloop()
|
|
357
|
+
except BaseException as inst:
|
|
358
|
+
# use exception manager first
|
|
359
|
+
r = ExceptionManager.handle_exception(inst)
|
|
360
|
+
if r == ExceptionManager.RAISE:
|
|
361
|
+
stopTouchApp()
|
|
362
|
+
raise
|
|
363
|
+
else:
|
|
364
|
+
pass
|
|
365
|
+
|
|
366
|
+
Logger.info("Window: exiting mainloop and closing.")
|
|
367
|
+
self.close()
|
|
368
|
+
|
|
369
|
+
def idle(self):
|
|
370
|
+
'''This function is called after every frame. By default:
|
|
371
|
+
|
|
372
|
+
* it "ticks" the clock to the next frame.
|
|
373
|
+
* it reads all input and dispatches events.
|
|
374
|
+
* it dispatches `on_update`, `on_draw` and `on_flip` events to the
|
|
375
|
+
window.
|
|
376
|
+
'''
|
|
377
|
+
|
|
378
|
+
# update dt
|
|
379
|
+
Clock.tick()
|
|
380
|
+
|
|
381
|
+
# read and dispatch input from providers
|
|
382
|
+
if not self.quit:
|
|
383
|
+
self.dispatch_input()
|
|
384
|
+
|
|
385
|
+
# flush all the canvas operation
|
|
386
|
+
if not self.quit:
|
|
387
|
+
Builder.sync()
|
|
388
|
+
|
|
389
|
+
# tick before draw
|
|
390
|
+
if not self.quit:
|
|
391
|
+
Clock.tick_draw()
|
|
392
|
+
|
|
393
|
+
# flush all the canvas operation
|
|
394
|
+
if not self.quit:
|
|
395
|
+
Builder.sync()
|
|
396
|
+
|
|
397
|
+
if not self.quit:
|
|
398
|
+
window = self.window
|
|
399
|
+
if window and window.canvas.needs_redraw:
|
|
400
|
+
window.dispatch('on_draw')
|
|
401
|
+
window.dispatch('on_flip')
|
|
402
|
+
|
|
403
|
+
# don't loop if we don't have listeners !
|
|
404
|
+
if len(self.event_listeners) == 0:
|
|
405
|
+
Logger.error('Base: No event listeners have been created')
|
|
406
|
+
Logger.error('Base: Application will leave')
|
|
407
|
+
self.exit()
|
|
408
|
+
return False
|
|
409
|
+
|
|
410
|
+
return self.quit
|
|
411
|
+
|
|
412
|
+
async def async_idle(self):
|
|
413
|
+
'''Identical to :meth:`idle`, but instead used when running
|
|
414
|
+
within an async event loop.
|
|
415
|
+
'''
|
|
416
|
+
|
|
417
|
+
# update dt
|
|
418
|
+
await Clock.async_tick()
|
|
419
|
+
|
|
420
|
+
# read and dispatch input from providers
|
|
421
|
+
if not self.quit:
|
|
422
|
+
self.dispatch_input()
|
|
423
|
+
|
|
424
|
+
# flush all the canvas operation
|
|
425
|
+
if not self.quit:
|
|
426
|
+
Builder.sync()
|
|
427
|
+
|
|
428
|
+
# tick before draw
|
|
429
|
+
if not self.quit:
|
|
430
|
+
Clock.tick_draw()
|
|
431
|
+
|
|
432
|
+
# flush all the canvas operation
|
|
433
|
+
if not self.quit:
|
|
434
|
+
Builder.sync()
|
|
435
|
+
|
|
436
|
+
if not self.quit:
|
|
437
|
+
window = self.window
|
|
438
|
+
if window and window.canvas.needs_redraw:
|
|
439
|
+
window.dispatch('on_draw')
|
|
440
|
+
window.dispatch('on_flip')
|
|
441
|
+
|
|
442
|
+
# don't loop if we don't have listeners !
|
|
443
|
+
if len(self.event_listeners) == 0:
|
|
444
|
+
Logger.error('Base: No event listeners have been created')
|
|
445
|
+
Logger.error('Base: Application will leave')
|
|
446
|
+
self.exit()
|
|
447
|
+
return False
|
|
448
|
+
|
|
449
|
+
return self.quit
|
|
450
|
+
|
|
451
|
+
def run(self):
|
|
452
|
+
'''Main loop'''
|
|
453
|
+
while not self.quit:
|
|
454
|
+
self.idle()
|
|
455
|
+
self.exit()
|
|
456
|
+
|
|
457
|
+
def exit(self):
|
|
458
|
+
'''Close the main loop and close the window.'''
|
|
459
|
+
self.close()
|
|
460
|
+
if self.window:
|
|
461
|
+
self.window.close()
|
|
462
|
+
|
|
463
|
+
def on_stop(self):
|
|
464
|
+
'''Event handler for `on_stop` events which will be fired right
|
|
465
|
+
after all input providers have been stopped.'''
|
|
466
|
+
pass
|
|
467
|
+
|
|
468
|
+
def on_pause(self):
|
|
469
|
+
'''Event handler for `on_pause` which will be fired when
|
|
470
|
+
the event loop is paused.'''
|
|
471
|
+
pass
|
|
472
|
+
|
|
473
|
+
def on_start(self):
|
|
474
|
+
'''Event handler for `on_start` which will be fired right
|
|
475
|
+
after all input providers have been started.'''
|
|
476
|
+
pass
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
#: EventLoop instance
|
|
480
|
+
EventLoop = EventLoopBase()
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
def _runTouchApp_prepare(widget=None):
|
|
484
|
+
from kivy.input import MotionEventFactory, kivy_postproc_modules
|
|
485
|
+
|
|
486
|
+
# Ok, we got one widget, and we are not in embedded mode
|
|
487
|
+
# so, user don't create the window, let's create it for him !
|
|
488
|
+
if widget:
|
|
489
|
+
EventLoop.ensure_window()
|
|
490
|
+
|
|
491
|
+
# Instance all configured input
|
|
492
|
+
for key, value in Config.items('input'):
|
|
493
|
+
Logger.debug('Base: Create provider from %s' % (str(value)))
|
|
494
|
+
|
|
495
|
+
# split value
|
|
496
|
+
args = str(value).split(',', 1)
|
|
497
|
+
if len(args) == 1:
|
|
498
|
+
args.append('')
|
|
499
|
+
provider_id, args = args
|
|
500
|
+
provider = MotionEventFactory.get(provider_id)
|
|
501
|
+
if provider is None:
|
|
502
|
+
Logger.warning('Base: Unknown <%s> provider' % str(provider_id))
|
|
503
|
+
continue
|
|
504
|
+
|
|
505
|
+
# create provider
|
|
506
|
+
p = provider(key, args)
|
|
507
|
+
if p:
|
|
508
|
+
EventLoop.add_input_provider(p, True)
|
|
509
|
+
|
|
510
|
+
# add postproc modules
|
|
511
|
+
for mod in list(kivy_postproc_modules.values()):
|
|
512
|
+
EventLoop.add_postproc_module(mod)
|
|
513
|
+
|
|
514
|
+
# add main widget
|
|
515
|
+
if widget and EventLoop.window:
|
|
516
|
+
if widget not in EventLoop.window.children:
|
|
517
|
+
EventLoop.window.add_widget(widget)
|
|
518
|
+
|
|
519
|
+
# start event loop
|
|
520
|
+
Logger.info('Base: Start application main loop')
|
|
521
|
+
EventLoop.start()
|
|
522
|
+
|
|
523
|
+
# remove presplash on the next frame
|
|
524
|
+
if platform == 'android':
|
|
525
|
+
Clock.schedule_once(EventLoop.remove_android_splash)
|
|
526
|
+
|
|
527
|
+
# in non-embedded mode, there are 2 issues
|
|
528
|
+
#
|
|
529
|
+
# 1. if user created a window, call the mainloop from window.
|
|
530
|
+
# This is due to glut, it need to be called with
|
|
531
|
+
# glutMainLoop(). Only FreeGLUT got a gluMainLoopEvent().
|
|
532
|
+
# So, we are executing the dispatching function inside
|
|
533
|
+
# a redisplay event.
|
|
534
|
+
#
|
|
535
|
+
# 2. if no window is created, we are dispatching event loop
|
|
536
|
+
# ourself (previous behavior.)
|
|
537
|
+
#
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
def runTouchApp(widget=None, embedded=False):
|
|
541
|
+
'''Static main function that starts the application loop.
|
|
542
|
+
You can access some magic via the following arguments:
|
|
543
|
+
|
|
544
|
+
See :mod:`kivy.app` for example usage.
|
|
545
|
+
|
|
546
|
+
:Parameters:
|
|
547
|
+
`<empty>`
|
|
548
|
+
To make dispatching work, you need at least one
|
|
549
|
+
input listener. If not, application will leave.
|
|
550
|
+
(MTWindow act as an input listener)
|
|
551
|
+
|
|
552
|
+
`widget`
|
|
553
|
+
If you pass only a widget, a MTWindow will be created
|
|
554
|
+
and your widget will be added to the window as the root
|
|
555
|
+
widget.
|
|
556
|
+
|
|
557
|
+
`embedded`
|
|
558
|
+
No event dispatching is done. This will be your job.
|
|
559
|
+
|
|
560
|
+
`widget + embedded`
|
|
561
|
+
No event dispatching is done. This will be your job but
|
|
562
|
+
we try to get the window (must be created by you beforehand)
|
|
563
|
+
and add the widget to it. Very useful for embedding Kivy
|
|
564
|
+
in another toolkit. (like Qt, check kivy-designed)
|
|
565
|
+
|
|
566
|
+
'''
|
|
567
|
+
_runTouchApp_prepare(widget=widget)
|
|
568
|
+
|
|
569
|
+
# we are in embedded mode, don't do dispatching.
|
|
570
|
+
if embedded:
|
|
571
|
+
return
|
|
572
|
+
|
|
573
|
+
try:
|
|
574
|
+
EventLoop.mainloop()
|
|
575
|
+
finally:
|
|
576
|
+
stopTouchApp()
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
async def async_runTouchApp(widget=None, embedded=False, async_lib=None):
|
|
580
|
+
'''Identical to :func:`runTouchApp` but instead it is a coroutine
|
|
581
|
+
that can be run in an existing async event loop.
|
|
582
|
+
|
|
583
|
+
``async_lib`` is the async library to use. See :mod:`kivy.app` for details
|
|
584
|
+
and example usage.
|
|
585
|
+
|
|
586
|
+
.. versionadded:: 2.0.0
|
|
587
|
+
'''
|
|
588
|
+
if async_lib is not None:
|
|
589
|
+
Clock.init_async_lib(async_lib)
|
|
590
|
+
_runTouchApp_prepare(widget=widget)
|
|
591
|
+
|
|
592
|
+
# we are in embedded mode, don't do dispatching.
|
|
593
|
+
if embedded:
|
|
594
|
+
return
|
|
595
|
+
|
|
596
|
+
try:
|
|
597
|
+
await EventLoop.async_mainloop()
|
|
598
|
+
finally:
|
|
599
|
+
stopTouchApp()
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
def stopTouchApp():
|
|
603
|
+
'''Stop the current application by leaving the main loop.
|
|
604
|
+
|
|
605
|
+
See :mod:`kivy.app` for example usage.
|
|
606
|
+
'''
|
|
607
|
+
if EventLoop is None:
|
|
608
|
+
return
|
|
609
|
+
if EventLoop.status in ('stopped', 'closed'):
|
|
610
|
+
return
|
|
611
|
+
if EventLoop.status != 'started':
|
|
612
|
+
if not EventLoop.stopping:
|
|
613
|
+
EventLoop.stopping = True
|
|
614
|
+
Clock.schedule_once(lambda dt: stopTouchApp(), 0)
|
|
615
|
+
return
|
|
616
|
+
Logger.info('Base: Leaving application in progress...')
|
|
617
|
+
EventLoop.close()
|