Kivy-examples 2.3.1.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/monkey.obj +7966 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/objloader.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/simple.glsl +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/editor.kv +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/main.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/compass.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/needle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/rose.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/main.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/takepicture.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/animation/animate.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite.py +152 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite_data/testkvdir.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_build.py +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_config.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv_in_template1.py +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/template1/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/testkvfile.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_advanced.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_basic.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_advanced.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_basic.py +58 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12908_sweet_trip_mm_clap_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12909_sweet_trip_mm_clap_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12910_sweet_trip_mm_clap_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12911_sweet_trip_mm_hat_cl.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12913_sweet_trip_mm_kick_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12914_sweet_trip_mm_kick_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12915_sweet_trip_mm_kick_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12916_sweet_trip_mm_kwik_mod_01.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12917_sweet_trip_mm_kwik_mod_02.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12918_sweet_trip_mm_kwik_mod_03.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12919_sweet_trip_mm_kwik_mod_04.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12920_sweet_trip_mm_kwik_mod_05.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12921_sweet_trip_mm_kwik_mod_06.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12922_sweet_trip_mm_kwik_mod_07.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12923_sweet_trip_mm_metal_clave.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12925_sweet_trip_mm_sweep_x.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12926_sweet_trip_mm_sweep_y.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12927_sweet_trip_mm_sweep_z.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/audio.kv +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/main.py +81 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/pitch.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/camera/main.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/bezier.py +105 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/canvas_stress.py +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/circle.py +84 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/fbo_canvas.py +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/kiwi.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines_extended.py +183 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh.py +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh_manipulation.py +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture1.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture2.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/multitexture.py +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/repeat_texture.py +65 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rotation.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rounded_rectangle.py +153 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/scale.py +37 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/stencil_canvas.py +85 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/tesselate.py +146 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture_example_image.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/1.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/2.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/3.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/root.kv +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/main.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_image.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_video.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/camera_puzzle.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/AnchorLayoutContainer.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/BoxLayoutContainer.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ButtonContainer.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/CheckBoxContainer.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FileChooserContainer.kv +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FloatLayoutContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/GridLayoutContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/LabelContainer.kv +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/MediaContainer.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PlaygroundContainer.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PopupContainer.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ProgressBarContainer.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/RestContainer.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ScatterContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/SelectorsContainer.kv +10 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/StackLayoutContainer.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/TextContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/kivycatalog.kv +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/main.py +192 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.kv +117 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.py +180 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/helpers.py +30 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.kv +164 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.py +276 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/main.py +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/multistroke.kv +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.kv +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.py +97 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Bubbles.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Ill1.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Wall.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/main.py +73 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/pictures.kv +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/main.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/shadereditor.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/README.txt +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/background.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/README +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/bug.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-left.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-right.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/accordions.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/bubbles.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/buttons.kv +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/carousel.kv +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/checkboxes.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/codeinput.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/dropdown.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/filechoosers.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/popups.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/progressbar.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/rstdocument.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/scatter.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/screenmanager.kv +46 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/sliders.kv +55 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/spinner.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/splitter.kv +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/switches.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/tabbedpanel + layouts.kv +69 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/textinputs.kv +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/togglebutton.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/main.py +243 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/showcase.kv +100 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/README.txt +12 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/main.py +170 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/particle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/touchtracer.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_client_app.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_server_app.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/twistd_app.py +66 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/gesture_board.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/my_gestures.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/controller.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/main.py +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/1_skeleton.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/2_print_touch.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/3_draw_ellipse.py +22 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/4_draw_line.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/5_random_colors.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/6_button.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/quickstart/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/layout.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/main.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/test.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/main.py +226 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/numeric.json +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/README.txt +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/kinectviewer.py +283 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_camera.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_fbo.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_layout.kv +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_logo.kv +36 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_scatter.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_stencil.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_video.kv +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/builder_template.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/id_in_kv.py +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/kv_and_py.py +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kivy.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kvrun.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/clipboard.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/custom_titlebar.py +56 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/imagesave.py +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/joystick.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/multiple_dropfile.py +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/on_textedit_event.py +104 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/opacitywindow.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapecollisions.py +397 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapedwindow.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/two_panes.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/urlrequest.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/main.py +122 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.py +86 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.kv +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.py +102 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/tex3.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/benchmark.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/cloud.svg +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main-smaa.py +155 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/music.svg +68 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/rotated.svg +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/ship.svg +181 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/sun.svg +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/tiger.svg +813 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/text/pango_demo.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/data/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/main.py +163 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/note.kv +154 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/main.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/pong.kv +2 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/pong.kv +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/main.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/pong.kv +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/main.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/pong.kv +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/main.py +75 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/accordion_1.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/actionbar.py +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/asyncimage.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/boxlayout_poshint.py +54 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/bubble_test.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/camera.py +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/carousel_buttons.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.mpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinput.py +225 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinputtest.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorpicker.py +234 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorusage.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/compound_selection.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/customcollide.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget2.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget3_advanced.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/fbowidget.py +111 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/focus_behavior.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/image_mipmap.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/keyboardlistener.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_mipmap.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_sizing.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_text_size.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_with_markup.py +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/lang_dynamic_classes.py +18 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/pagelayout.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/popup_with_kv.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/basic_data.py +124 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/infinite_scrolling.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/key_viewclass.py +149 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/messenger.py +196 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/pull_to_refresh.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/rv_animate_items.py +109 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/rstexample.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/screenmanager.py +106 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.py +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/bird.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white_animated.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/cube.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/simple_cv_joint_animated.gif +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.kv +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.py +150 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/__init__.py +7 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/custom_button.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/settings.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/shorten_text.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/spinner.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/splitter.py +74 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbed_panel_showcase.py +316 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbedpanel.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.kv +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textinput.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/unicode_textinput.py +244 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/videoplayer.py +26 -0
- Kivy_examples-2.3.1.dev0.dist-info/AUTHORS +66 -0
- Kivy_examples-2.3.1.dev0.dist-info/LICENSE +21 -0
- Kivy_examples-2.3.1.dev0.dist-info/METADATA +382 -0
- Kivy_examples-2.3.1.dev0.dist-info/RECORD +624 -0
- Kivy_examples-2.3.1.dev0.dist-info/WHEEL +5 -0
- Kivy_examples-2.3.1.dev0.dist-info/dependency_links.txt +1 -0
- Kivy_examples-2.3.1.dev0.dist-info/top_level.txt +1 -0
- kivy/__init__.py +519 -0
- kivy/_version.py +18 -0
- kivy/animation.py +831 -0
- kivy/app.py +1213 -0
- kivy/atlas.py +456 -0
- kivy/base.py +617 -0
- kivy/cache.py +262 -0
- kivy/clock.py +1172 -0
- kivy/compat.py +82 -0
- kivy/config.py +1004 -0
- kivy/context.py +102 -0
- kivy/core/__init__.py +247 -0
- kivy/core/audio/__init__.py +223 -0
- kivy/core/audio/audio_android.py +104 -0
- kivy/core/audio/audio_avplayer.py +82 -0
- kivy/core/audio/audio_ffpyplayer.py +185 -0
- kivy/core/audio/audio_gstplayer.py +101 -0
- kivy/core/audio/audio_pygame.py +127 -0
- kivy/core/camera/__init__.py +151 -0
- kivy/core/camera/camera_android.py +206 -0
- kivy/core/camera/camera_gi.py +170 -0
- kivy/core/camera/camera_opencv.py +163 -0
- kivy/core/camera/camera_picamera.py +96 -0
- kivy/core/clipboard/__init__.py +157 -0
- kivy/core/clipboard/_clipboard_ext.py +36 -0
- kivy/core/clipboard/clipboard_android.py +91 -0
- kivy/core/clipboard/clipboard_dbusklipper.py +41 -0
- kivy/core/clipboard/clipboard_dummy.py +26 -0
- kivy/core/clipboard/clipboard_gtk3.py +47 -0
- kivy/core/clipboard/clipboard_nspaste.py +44 -0
- kivy/core/clipboard/clipboard_pygame.py +67 -0
- kivy/core/clipboard/clipboard_sdl2.py +36 -0
- kivy/core/clipboard/clipboard_winctypes.py +107 -0
- kivy/core/clipboard/clipboard_xclip.py +29 -0
- kivy/core/clipboard/clipboard_xsel.py +26 -0
- kivy/core/gl/__init__.py +90 -0
- kivy/core/image/__init__.py +996 -0
- kivy/core/image/img_dds.py +40 -0
- kivy/core/image/img_ffpyplayer.py +87 -0
- kivy/core/image/img_pil.py +123 -0
- kivy/core/image/img_pygame.py +119 -0
- kivy/core/image/img_sdl2.py +66 -0
- kivy/core/image/img_tex.py +58 -0
- kivy/core/spelling/__init__.py +135 -0
- kivy/core/spelling/spelling_enchant.py +50 -0
- kivy/core/spelling/spelling_osxappkit.py +64 -0
- kivy/core/text/__init__.py +1090 -0
- kivy/core/text/markup.py +893 -0
- kivy/core/text/text_pango.py +145 -0
- kivy/core/text/text_pil.py +84 -0
- kivy/core/text/text_pygame.py +117 -0
- kivy/core/text/text_sdl2.py +50 -0
- kivy/core/video/__init__.py +219 -0
- kivy/core/video/video_ffmpeg.py +106 -0
- kivy/core/video/video_ffpyplayer.py +449 -0
- kivy/core/video/video_gstplayer.py +140 -0
- kivy/core/video/video_null.py +12 -0
- kivy/core/window/__init__.py +2515 -0
- kivy/core/window/window_egl_rpi.py +86 -0
- kivy/core/window/window_pygame.py +441 -0
- kivy/core/window/window_sdl2.py +999 -0
- kivy/deps/__init__.py +6 -0
- kivy/effects/__init__.py +23 -0
- kivy/effects/dampedscroll.py +114 -0
- kivy/effects/kinetic.py +193 -0
- kivy/effects/opacityscroll.py +27 -0
- kivy/effects/scroll.py +126 -0
- kivy/event.py +12 -0
- kivy/eventmanager/__init__.py +185 -0
- kivy/extras/__init__.py +0 -0
- kivy/extras/highlight.py +52 -0
- kivy/factory.py +190 -0
- kivy/factory_registers.py +201 -0
- kivy/garden/__init__.py +186 -0
- kivy/geometry.py +121 -0
- kivy/gesture.py +424 -0
- kivy/graphics/__init__.py +126 -0
- kivy/graphics/cgl_backend/__init__.py +0 -0
- kivy/input/__init__.py +39 -0
- kivy/input/factory.py +35 -0
- kivy/input/motionevent.py +587 -0
- kivy/input/postproc/__init__.py +27 -0
- kivy/input/postproc/calibration.py +200 -0
- kivy/input/postproc/dejitter.py +74 -0
- kivy/input/postproc/doubletap.py +101 -0
- kivy/input/postproc/ignorelist.py +47 -0
- kivy/input/postproc/retaintouch.py +93 -0
- kivy/input/postproc/tripletap.py +106 -0
- kivy/input/provider.py +40 -0
- kivy/input/providers/__init__.py +68 -0
- kivy/input/providers/androidjoystick.py +117 -0
- kivy/input/providers/hidinput.py +778 -0
- kivy/input/providers/leapfinger.py +113 -0
- kivy/input/providers/linuxwacom.py +396 -0
- kivy/input/providers/mactouch.py +220 -0
- kivy/input/providers/mouse.py +424 -0
- kivy/input/providers/mtdev.py +380 -0
- kivy/input/providers/probesysfs.py +254 -0
- kivy/input/providers/tuio.py +326 -0
- kivy/input/providers/wm_common.py +162 -0
- kivy/input/providers/wm_pen.py +121 -0
- kivy/input/providers/wm_touch.py +157 -0
- kivy/input/recorder.py +335 -0
- kivy/input/shape.py +27 -0
- kivy/interactive.py +335 -0
- kivy/lang/__init__.py +883 -0
- kivy/lang/builder.py +1004 -0
- kivy/lang/parser.py +822 -0
- kivy/lib/__init__.py +21 -0
- kivy/lib/ddsfile.py +419 -0
- kivy/lib/gstplayer/__init__.py +27 -0
- kivy/lib/mtdev.py +254 -0
- kivy/lib/vidcore_lite/__init__.py +0 -0
- kivy/loader.py +579 -0
- kivy/logger.py +646 -0
- kivy/metrics.py +421 -0
- kivy/modules/__init__.py +300 -0
- kivy/modules/_webdebugger.py +200 -0
- kivy/modules/console.py +1059 -0
- kivy/modules/cursor.py +75 -0
- kivy/modules/inspector.py +755 -0
- kivy/modules/joycursor.py +299 -0
- kivy/modules/keybinding.py +64 -0
- kivy/modules/monitor.py +90 -0
- kivy/modules/recorder.py +94 -0
- kivy/modules/screen.py +183 -0
- kivy/modules/showborder.py +33 -0
- kivy/modules/touchring.py +97 -0
- kivy/modules/webdebugger.py +30 -0
- kivy/multistroke.py +1477 -0
- kivy/network/__init__.py +7 -0
- kivy/network/urlrequest.py +794 -0
- kivy/parser.py +154 -0
- kivy/resources.py +102 -0
- kivy/storage/__init__.py +405 -0
- kivy/storage/dictstore.py +98 -0
- kivy/storage/jsonstore.py +92 -0
- kivy/storage/redisstore.py +103 -0
- kivy/support.py +267 -0
- kivy/tests/__init__.py +11 -0
- kivy/tests/async_common.py +568 -0
- kivy/tests/common.py +524 -0
- kivy/tests/conftest.py +33 -0
- kivy/tests/fixtures.py +169 -0
- kivy/tests/perf_test_textinput.py +195 -0
- kivy/tests/pyinstaller/simple_widget/main.py +12 -0
- kivy/tests/pyinstaller/simple_widget/project/__init__.py +0 -0
- kivy/tests/pyinstaller/simple_widget/project/widget.py +12 -0
- kivy/tests/pyinstaller/test_pyinstaller.py +115 -0
- kivy/tests/pyinstaller/video_widget/main.py +6 -0
- kivy/tests/pyinstaller/video_widget/project/__init__.py +38 -0
- kivy/tests/test_animations.py +415 -0
- kivy/tests/test_app.py +216 -0
- kivy/tests/test_audio.py +69 -0
- kivy/tests/test_benchmark.py +292 -0
- kivy/tests/test_clipboard.py +48 -0
- kivy/tests/test_clock.py +292 -0
- kivy/tests/test_compat.py +6 -0
- kivy/tests/test_config.py +35 -0
- kivy/tests/test_coverage.py +83 -0
- kivy/tests/test_doc_gallery.py +38 -0
- kivy/tests/test_environ_cli.py +50 -0
- kivy/tests/test_fbo_py2py3.py +74 -0
- kivy/tests/test_filechooser.py +11 -0
- kivy/tests/test_filechooser_unicode.py +82 -0
- kivy/tests/test_fonts.py +42 -0
- kivy/tests/test_garden.py +23 -0
- kivy/tests/test_graphics.py +1149 -0
- kivy/tests/test_graphics_svg.py +84 -0
- kivy/tests/test_image.py +74 -0
- kivy/tests/test_imageloader.py +485 -0
- kivy/tests/test_invalid_lang.py +42 -0
- kivy/tests/test_issues/test_6315.py +55 -0
- kivy/tests/test_issues/test_issue_1084.py +47 -0
- kivy/tests/test_issues/test_issue_1091.py +19 -0
- kivy/tests/test_issues/test_issue_599.py +21 -0
- kivy/tests/test_issues/test_issue_609.py +19 -0
- kivy/tests/test_issues/test_issue_6909.py +28 -0
- kivy/tests/test_issues/test_issue_883.py +12 -0
- kivy/tests/test_kivy_init.py +30 -0
- kivy/tests/test_knspace.py +247 -0
- kivy/tests/test_lang.py +431 -0
- kivy/tests/test_lang_complex.py +87 -0
- kivy/tests/test_lang_pre_process_and_post_process.py +394 -0
- kivy/tests/test_logger.py +516 -0
- kivy/tests/test_metrics.py +30 -0
- kivy/tests/test_module_inspector.py +382 -0
- kivy/tests/test_motion_event.py +44 -0
- kivy/tests/test_mouse_hover_event.py +249 -0
- kivy/tests/test_mouse_multitouchsim.py +554 -0
- kivy/tests/test_multistroke.py +389 -0
- kivy/tests/test_properties.py +1332 -0
- kivy/tests/test_resources.py +79 -0
- kivy/tests/test_rst_replace.py +63 -0
- kivy/tests/test_screen.py +38 -0
- kivy/tests/test_storage.py +135 -0
- kivy/tests/test_uix_actionbar.py +363 -0
- kivy/tests/test_uix_anchorlayout.py +79 -0
- kivy/tests/test_uix_asyncimage.py +133 -0
- kivy/tests/test_uix_boxlayout.py +94 -0
- kivy/tests/test_uix_bubble.py +425 -0
- kivy/tests/test_uix_carousel.py +93 -0
- kivy/tests/test_uix_colorpicker.py +77 -0
- kivy/tests/test_uix_dropdown.py +91 -0
- kivy/tests/test_uix_gridlayout.py +244 -0
- kivy/tests/test_uix_layout.py +16 -0
- kivy/tests/test_uix_modal.py +101 -0
- kivy/tests/test_uix_recyclegridlayout.py +383 -0
- kivy/tests/test_uix_relativelayout.py +30 -0
- kivy/tests/test_uix_scrollview.py +358 -0
- kivy/tests/test_uix_settings.py +33 -0
- kivy/tests/test_uix_slider.py +156 -0
- kivy/tests/test_uix_stacklayout.py +120 -0
- kivy/tests/test_uix_textinput.py +577 -0
- kivy/tests/test_uix_translate_coordinates.py +72 -0
- kivy/tests/test_uix_videoplayer.py +112 -0
- kivy/tests/test_uix_widget.py +137 -0
- kivy/tests/test_urlrequest/test_urlrequest_requests.py +378 -0
- kivy/tests/test_urlrequest/test_urlrequest_urllib.py +155 -0
- kivy/tests/test_utils.py +237 -0
- kivy/tests/test_vector.py +256 -0
- kivy/tests/test_video.py +25 -0
- kivy/tests/test_weakmethod.py +44 -0
- kivy/tests/test_widget.py +127 -0
- kivy/tests/test_widget_walk.py +70 -0
- kivy/tests/test_window_base.py +60 -0
- kivy/tests/test_window_info.py +29 -0
- kivy/tests/visual_test_label.py +291 -0
- kivy/tools/__init__.py +44 -0
- kivy/tools/benchmark.py +286 -0
- kivy/tools/changelog_parser.py +120 -0
- kivy/tools/coverage.py +135 -0
- kivy/tools/gallery.py +323 -0
- kivy/tools/generate-icons.py +117 -0
- kivy/tools/gles_compat/subset_gles.py +125 -0
- kivy/tools/highlight/__init__.py +9 -0
- kivy/tools/kviewer.py +80 -0
- kivy/tools/packaging/__init__.py +12 -0
- kivy/tools/packaging/cython_cfg.py +82 -0
- kivy/tools/packaging/factory.py +105 -0
- kivy/tools/packaging/pyinstaller_hooks/__init__.py +381 -0
- kivy/tools/packaging/pyinstaller_hooks/__main__.py +29 -0
- kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py +9 -0
- kivy/tools/packaging/pyinstaller_hooks/pyi_rth_kivy.py +17 -0
- kivy/tools/pep8checker/pep8.py +2316 -0
- kivy/tools/pep8checker/pep8kivy.py +109 -0
- kivy/tools/report.py +223 -0
- kivy/tools/stub-gl-debug.py +201 -0
- kivy/tools/texturecompress.py +233 -0
- kivy/uix/__init__.py +56 -0
- kivy/uix/accordion.py +484 -0
- kivy/uix/actionbar.py +934 -0
- kivy/uix/anchorlayout.py +122 -0
- kivy/uix/behaviors/__init__.py +95 -0
- kivy/uix/behaviors/button.py +212 -0
- kivy/uix/behaviors/codenavigation.py +167 -0
- kivy/uix/behaviors/compoundselection.py +688 -0
- kivy/uix/behaviors/cover.py +160 -0
- kivy/uix/behaviors/drag.py +234 -0
- kivy/uix/behaviors/emacs.py +140 -0
- kivy/uix/behaviors/focus.py +595 -0
- kivy/uix/behaviors/knspace.py +590 -0
- kivy/uix/behaviors/togglebutton.py +156 -0
- kivy/uix/behaviors/touchripple.py +318 -0
- kivy/uix/boxlayout.py +331 -0
- kivy/uix/bubble.py +576 -0
- kivy/uix/button.py +137 -0
- kivy/uix/camera.py +118 -0
- kivy/uix/carousel.py +695 -0
- kivy/uix/checkbox.py +197 -0
- kivy/uix/codeinput.py +238 -0
- kivy/uix/colorpicker.py +486 -0
- kivy/uix/dropdown.py +391 -0
- kivy/uix/effectwidget.py +772 -0
- kivy/uix/filechooser.py +1134 -0
- kivy/uix/floatlayout.py +148 -0
- kivy/uix/gesturesurface.py +625 -0
- kivy/uix/gridlayout.py +629 -0
- kivy/uix/image.py +528 -0
- kivy/uix/label.py +1200 -0
- kivy/uix/layout.py +322 -0
- kivy/uix/modalview.py +339 -0
- kivy/uix/pagelayout.py +233 -0
- kivy/uix/popup.py +266 -0
- kivy/uix/progressbar.py +95 -0
- kivy/uix/recycleboxlayout.py +183 -0
- kivy/uix/recyclegridlayout.py +255 -0
- kivy/uix/recyclelayout.py +446 -0
- kivy/uix/recycleview/__init__.py +624 -0
- kivy/uix/recycleview/datamodel.py +194 -0
- kivy/uix/recycleview/layout.py +253 -0
- kivy/uix/recycleview/views.py +423 -0
- kivy/uix/relativelayout.py +324 -0
- kivy/uix/rst.py +1492 -0
- kivy/uix/sandbox.py +198 -0
- kivy/uix/scatter.py +645 -0
- kivy/uix/scatterlayout.py +93 -0
- kivy/uix/screenmanager.py +1275 -0
- kivy/uix/scrollview.py +1288 -0
- kivy/uix/settings.py +1343 -0
- kivy/uix/slider.py +421 -0
- kivy/uix/spinner.py +221 -0
- kivy/uix/splitter.py +430 -0
- kivy/uix/stacklayout.py +331 -0
- kivy/uix/stencilview.py +40 -0
- kivy/uix/switch.py +122 -0
- kivy/uix/tabbedpanel.py +880 -0
- kivy/uix/textinput.py +4049 -0
- kivy/uix/togglebutton.py +37 -0
- kivy/uix/treeview.py +665 -0
- kivy/uix/video.py +302 -0
- kivy/uix/videoplayer.py +697 -0
- kivy/uix/vkeyboard.py +879 -0
- kivy/uix/widget.py +1629 -0
- kivy/utils.py +550 -0
- kivy/vector.py +412 -0
- kivy/weakmethod.py +72 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'''
|
|
2
|
+
AudioAvplayer: implementation of Sound using pyobjus / AVFoundation.
|
|
3
|
+
Works on iOS / OSX.
|
|
4
|
+
'''
|
|
5
|
+
|
|
6
|
+
__all__ = ('SoundAvplayer', )
|
|
7
|
+
|
|
8
|
+
from kivy.core.audio import Sound, SoundLoader
|
|
9
|
+
from pyobjus import autoclass, protocol
|
|
10
|
+
from pyobjus.dylib_manager import load_framework, INCLUDE
|
|
11
|
+
|
|
12
|
+
load_framework(INCLUDE.AVFoundation)
|
|
13
|
+
AVAudioPlayer = autoclass("AVAudioPlayer")
|
|
14
|
+
NSURL = autoclass("NSURL")
|
|
15
|
+
NSString = autoclass("NSString")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SoundAvplayer(Sound):
|
|
19
|
+
@staticmethod
|
|
20
|
+
def extensions():
|
|
21
|
+
# taken from https://goo.gl/015kvU
|
|
22
|
+
return ("aac", "adts", "aif", "aiff", "aifc", "caf", "mp3", "mp4",
|
|
23
|
+
"m4a", "snd", "au", "sd2", "wav")
|
|
24
|
+
|
|
25
|
+
def __init__(self, **kwargs):
|
|
26
|
+
self._avplayer = None
|
|
27
|
+
super(SoundAvplayer, self).__init__(**kwargs)
|
|
28
|
+
|
|
29
|
+
def load(self):
|
|
30
|
+
self.unload()
|
|
31
|
+
fn = NSString.alloc().initWithUTF8String_(self.source)
|
|
32
|
+
url = NSURL.alloc().initFileURLWithPath_(fn)
|
|
33
|
+
self._avplayer = AVAudioPlayer.alloc().initWithContentsOfURL_error_(
|
|
34
|
+
url, None)
|
|
35
|
+
|
|
36
|
+
def unload(self):
|
|
37
|
+
self.stop()
|
|
38
|
+
self._avplayer = None
|
|
39
|
+
|
|
40
|
+
def play(self):
|
|
41
|
+
if not self._avplayer:
|
|
42
|
+
return
|
|
43
|
+
self._avplayer.delegate = self
|
|
44
|
+
self._avplayer.play()
|
|
45
|
+
super(SoundAvplayer, self).play()
|
|
46
|
+
|
|
47
|
+
def stop(self):
|
|
48
|
+
if not self._avplayer:
|
|
49
|
+
return
|
|
50
|
+
self._avplayer.delegate = None
|
|
51
|
+
self._avplayer.stop()
|
|
52
|
+
super(SoundAvplayer, self).stop()
|
|
53
|
+
|
|
54
|
+
def seek(self, position):
|
|
55
|
+
if not self._avplayer:
|
|
56
|
+
return
|
|
57
|
+
avplayer = self._avplayer
|
|
58
|
+
avplayer.stop()
|
|
59
|
+
avplayer.currentTime = float(position)
|
|
60
|
+
if self.state == 'play':
|
|
61
|
+
avplayer.play()
|
|
62
|
+
|
|
63
|
+
def get_pos(self):
|
|
64
|
+
if self._avplayer:
|
|
65
|
+
return self._avplayer.currentTime
|
|
66
|
+
return super(SoundAvplayer, self).get_pos()
|
|
67
|
+
|
|
68
|
+
def on_volume(self, instance, volume):
|
|
69
|
+
if self._avplayer:
|
|
70
|
+
self._avplayer.volume = float(volume)
|
|
71
|
+
|
|
72
|
+
def _get_length(self):
|
|
73
|
+
if self._avplayer:
|
|
74
|
+
return self._avplayer.duration
|
|
75
|
+
return super(SoundAvplayer, self)._get_length()
|
|
76
|
+
|
|
77
|
+
@protocol("AVAudioPlayerDelegate")
|
|
78
|
+
def audioPlayerDidFinishPlaying_successfully_(self, player, flag):
|
|
79
|
+
self.stop()
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
SoundLoader.register(SoundAvplayer)
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
'''
|
|
2
|
+
FFmpeg based audio player
|
|
3
|
+
=========================
|
|
4
|
+
|
|
5
|
+
To use, you need to install ffpyplayer and have a compiled ffmpeg shared
|
|
6
|
+
library.
|
|
7
|
+
|
|
8
|
+
https://github.com/matham/ffpyplayer
|
|
9
|
+
|
|
10
|
+
The docs there describe how to set this up. But briefly, first you need to
|
|
11
|
+
compile ffmpeg using the shared flags while disabling the static flags (you'll
|
|
12
|
+
probably have to set the fPIC flag, e.g. CFLAGS=-fPIC). Here's some
|
|
13
|
+
instructions: https://trac.ffmpeg.org/wiki/CompilationGuide. For Windows, you
|
|
14
|
+
can download compiled GPL binaries from http://ffmpeg.zeranoe.com/builds/.
|
|
15
|
+
Similarly, you should download SDL.
|
|
16
|
+
|
|
17
|
+
Now, you should a ffmpeg and sdl directory. In each, you should have a include,
|
|
18
|
+
bin, and lib directory, where e.g. for Windows, lib contains the .dll.a files,
|
|
19
|
+
while bin contains the actual dlls. The include directory holds the headers.
|
|
20
|
+
The bin directory is only needed if the shared libraries are not already on
|
|
21
|
+
the path. In the environment define FFMPEG_ROOT and SDL_ROOT, each pointing to
|
|
22
|
+
the ffmpeg, and SDL directories, respectively. (If you're using SDL2,
|
|
23
|
+
the include directory will contain a directory called SDL2, which then holds
|
|
24
|
+
the headers).
|
|
25
|
+
|
|
26
|
+
Once defined, download the ffpyplayer git and run
|
|
27
|
+
|
|
28
|
+
python setup.py build_ext --inplace
|
|
29
|
+
|
|
30
|
+
Finally, before running you need to ensure that ffpyplayer is in python's path.
|
|
31
|
+
|
|
32
|
+
..Note::
|
|
33
|
+
|
|
34
|
+
When kivy exits by closing the window while the audio is playing,
|
|
35
|
+
it appears that the __del__method of SoundFFPy
|
|
36
|
+
is not called. Because of this the SoundFFPy object is not
|
|
37
|
+
properly deleted when kivy exits. The consequence is that because
|
|
38
|
+
MediaPlayer creates internal threads which do not have their daemon
|
|
39
|
+
flag set, when the main threads exists it'll hang and wait for the other
|
|
40
|
+
MediaPlayer threads to exit. But since __del__ is not called to delete the
|
|
41
|
+
MediaPlayer object, those threads will remain alive hanging kivy. What this
|
|
42
|
+
means is that you have to be sure to delete the MediaPlayer object before
|
|
43
|
+
kivy exits by setting it to None.
|
|
44
|
+
'''
|
|
45
|
+
|
|
46
|
+
__all__ = ('SoundFFPy', )
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
import ffpyplayer
|
|
50
|
+
from ffpyplayer.player import MediaPlayer
|
|
51
|
+
from ffpyplayer.tools import set_log_callback, get_log_callback, formats_in
|
|
52
|
+
except:
|
|
53
|
+
raise
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
from kivy.clock import Clock
|
|
57
|
+
from kivy.logger import Logger
|
|
58
|
+
from kivy.core.audio import Sound, SoundLoader
|
|
59
|
+
from kivy.weakmethod import WeakMethod
|
|
60
|
+
import time
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
Logger.info(
|
|
64
|
+
'SoundFFPy: Using ffpyplayer {}'.format(ffpyplayer.__version__))
|
|
65
|
+
except:
|
|
66
|
+
Logger.info('SoundFFPy: Using ffpyplayer {}'.format(ffpyplayer.version))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
logger_func = {'quiet': Logger.critical, 'panic': Logger.critical,
|
|
70
|
+
'fatal': Logger.critical, 'error': Logger.error,
|
|
71
|
+
'warning': Logger.warning, 'info': Logger.info,
|
|
72
|
+
'verbose': Logger.debug, 'debug': Logger.debug}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _log_callback(message, level):
|
|
76
|
+
message = message.strip()
|
|
77
|
+
if message:
|
|
78
|
+
logger_func[level]('ffpyplayer: {}'.format(message))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class SoundFFPy(Sound):
|
|
82
|
+
|
|
83
|
+
@staticmethod
|
|
84
|
+
def extensions():
|
|
85
|
+
return formats_in
|
|
86
|
+
|
|
87
|
+
def __init__(self, **kwargs):
|
|
88
|
+
self._ffplayer = None
|
|
89
|
+
self.quitted = False
|
|
90
|
+
self._log_callback_set = False
|
|
91
|
+
self._state = ''
|
|
92
|
+
self.state = 'stop'
|
|
93
|
+
|
|
94
|
+
if not get_log_callback():
|
|
95
|
+
set_log_callback(_log_callback)
|
|
96
|
+
self._log_callback_set = True
|
|
97
|
+
|
|
98
|
+
super(SoundFFPy, self).__init__(**kwargs)
|
|
99
|
+
|
|
100
|
+
def __del__(self):
|
|
101
|
+
self.unload()
|
|
102
|
+
if self._log_callback_set:
|
|
103
|
+
set_log_callback(None)
|
|
104
|
+
|
|
105
|
+
def _player_callback(self, selector, value):
|
|
106
|
+
if self._ffplayer is None:
|
|
107
|
+
return
|
|
108
|
+
if selector == 'quit':
|
|
109
|
+
def close(*args):
|
|
110
|
+
self.quitted = True
|
|
111
|
+
self.unload()
|
|
112
|
+
Clock.schedule_once(close, 0)
|
|
113
|
+
elif selector == 'eof':
|
|
114
|
+
Clock.schedule_once(self._do_eos, 0)
|
|
115
|
+
|
|
116
|
+
def load(self):
|
|
117
|
+
self.unload()
|
|
118
|
+
ff_opts = {'vn': True, 'sn': True} # only audio
|
|
119
|
+
self._ffplayer = MediaPlayer(self.source,
|
|
120
|
+
callback=self._player_callback,
|
|
121
|
+
loglevel='info', ff_opts=ff_opts)
|
|
122
|
+
player = self._ffplayer
|
|
123
|
+
player.set_volume(self.volume)
|
|
124
|
+
player.toggle_pause()
|
|
125
|
+
self._state = 'paused'
|
|
126
|
+
# wait until loaded or failed, shouldn't take long, but just to make
|
|
127
|
+
# sure metadata is available.
|
|
128
|
+
s = time.perf_counter()
|
|
129
|
+
while (player.get_metadata()['duration'] is None and
|
|
130
|
+
not self.quitted and time.perf_counter() - s < 10.):
|
|
131
|
+
time.sleep(0.005)
|
|
132
|
+
|
|
133
|
+
def unload(self):
|
|
134
|
+
if self._ffplayer:
|
|
135
|
+
self._ffplayer = None
|
|
136
|
+
self._state = ''
|
|
137
|
+
self.state = 'stop'
|
|
138
|
+
self.quitted = False
|
|
139
|
+
|
|
140
|
+
def play(self):
|
|
141
|
+
if self._state == 'playing':
|
|
142
|
+
super(SoundFFPy, self).play()
|
|
143
|
+
return
|
|
144
|
+
if not self._ffplayer:
|
|
145
|
+
self.load()
|
|
146
|
+
self._ffplayer.toggle_pause()
|
|
147
|
+
self._state = 'playing'
|
|
148
|
+
self.state = 'play'
|
|
149
|
+
super(SoundFFPy, self).play()
|
|
150
|
+
self.seek(0)
|
|
151
|
+
|
|
152
|
+
def stop(self):
|
|
153
|
+
if self._ffplayer and self._state == 'playing':
|
|
154
|
+
self._ffplayer.toggle_pause()
|
|
155
|
+
self._state = 'paused'
|
|
156
|
+
self.state = 'stop'
|
|
157
|
+
super(SoundFFPy, self).stop()
|
|
158
|
+
|
|
159
|
+
def seek(self, position):
|
|
160
|
+
if self._ffplayer is None:
|
|
161
|
+
return
|
|
162
|
+
self._ffplayer.seek(position, relative=False)
|
|
163
|
+
|
|
164
|
+
def get_pos(self):
|
|
165
|
+
if self._ffplayer is not None:
|
|
166
|
+
return self._ffplayer.get_pts()
|
|
167
|
+
return 0
|
|
168
|
+
|
|
169
|
+
def on_volume(self, instance, volume):
|
|
170
|
+
if self._ffplayer is not None:
|
|
171
|
+
self._ffplayer.set_volume(volume)
|
|
172
|
+
|
|
173
|
+
def _get_length(self):
|
|
174
|
+
if self._ffplayer is None:
|
|
175
|
+
return super(SoundFFPy, self)._get_length()
|
|
176
|
+
return self._ffplayer.get_metadata()['duration']
|
|
177
|
+
|
|
178
|
+
def _do_eos(self, *args):
|
|
179
|
+
if not self.loop:
|
|
180
|
+
self.stop()
|
|
181
|
+
else:
|
|
182
|
+
self.seek(0.)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
SoundLoader.register(SoundFFPy)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Audio Gstplayer
|
|
3
|
+
===============
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.8.0
|
|
6
|
+
|
|
7
|
+
Implementation of a VideoBase with Kivy :class:`~kivy.lib.gstplayer.GstPlayer`
|
|
8
|
+
This player is the preferred player, using Gstreamer 1.0, working on both
|
|
9
|
+
Python 2 and 3.
|
|
10
|
+
'''
|
|
11
|
+
|
|
12
|
+
from kivy.lib.gstplayer import GstPlayer, get_gst_version
|
|
13
|
+
from kivy.core.audio import Sound, SoundLoader
|
|
14
|
+
from kivy.logger import Logger
|
|
15
|
+
from kivy.compat import PY2
|
|
16
|
+
from kivy.clock import Clock
|
|
17
|
+
from os.path import realpath
|
|
18
|
+
|
|
19
|
+
if PY2:
|
|
20
|
+
from urllib import pathname2url
|
|
21
|
+
else:
|
|
22
|
+
from urllib.request import pathname2url
|
|
23
|
+
|
|
24
|
+
Logger.info('AudioGstplayer: Using Gstreamer {}'.format(
|
|
25
|
+
'.'.join(map(str, get_gst_version()))))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _on_gstplayer_message(mtype, message):
|
|
29
|
+
if mtype == 'error':
|
|
30
|
+
Logger.error('AudioGstplayer: {}'.format(message))
|
|
31
|
+
elif mtype == 'warning':
|
|
32
|
+
Logger.warning('AudioGstplayer: {}'.format(message))
|
|
33
|
+
elif mtype == 'info':
|
|
34
|
+
Logger.info('AudioGstplayer: {}'.format(message))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SoundGstplayer(Sound):
|
|
38
|
+
|
|
39
|
+
@staticmethod
|
|
40
|
+
def extensions():
|
|
41
|
+
return ('wav', 'ogg', 'mp3', 'm4a', 'flac', 'mp4')
|
|
42
|
+
|
|
43
|
+
def __init__(self, **kwargs):
|
|
44
|
+
self.player = None
|
|
45
|
+
super(SoundGstplayer, self).__init__(**kwargs)
|
|
46
|
+
|
|
47
|
+
def _on_gst_eos_sync(self):
|
|
48
|
+
Clock.schedule_once(self._on_gst_eos, 0)
|
|
49
|
+
|
|
50
|
+
def _on_gst_eos(self, *dt):
|
|
51
|
+
if self.loop:
|
|
52
|
+
self.player.stop()
|
|
53
|
+
self.player.play()
|
|
54
|
+
else:
|
|
55
|
+
self.stop()
|
|
56
|
+
|
|
57
|
+
def load(self):
|
|
58
|
+
self.unload()
|
|
59
|
+
uri = self._get_uri()
|
|
60
|
+
self.player = GstPlayer(uri, None, self._on_gst_eos_sync,
|
|
61
|
+
_on_gstplayer_message)
|
|
62
|
+
self.player.load()
|
|
63
|
+
|
|
64
|
+
def play(self):
|
|
65
|
+
# we need to set the volume everytime, it seems that stopping + playing
|
|
66
|
+
# the sound reset the volume.
|
|
67
|
+
self.player.set_volume(self.volume)
|
|
68
|
+
self.player.play()
|
|
69
|
+
super(SoundGstplayer, self).play()
|
|
70
|
+
|
|
71
|
+
def stop(self):
|
|
72
|
+
self.player.stop()
|
|
73
|
+
super(SoundGstplayer, self).stop()
|
|
74
|
+
|
|
75
|
+
def unload(self):
|
|
76
|
+
if self.player:
|
|
77
|
+
self.player.unload()
|
|
78
|
+
self.player = None
|
|
79
|
+
|
|
80
|
+
def seek(self, position):
|
|
81
|
+
self.player.seek(position / self.length)
|
|
82
|
+
|
|
83
|
+
def get_pos(self):
|
|
84
|
+
return self.player.get_position()
|
|
85
|
+
|
|
86
|
+
def _get_length(self):
|
|
87
|
+
return self.player.get_duration()
|
|
88
|
+
|
|
89
|
+
def on_volume(self, instance, volume):
|
|
90
|
+
self.player.set_volume(volume)
|
|
91
|
+
|
|
92
|
+
def _get_uri(self):
|
|
93
|
+
uri = self.source
|
|
94
|
+
if not uri:
|
|
95
|
+
return
|
|
96
|
+
if '://' not in uri:
|
|
97
|
+
uri = 'file:' + pathname2url(realpath(uri))
|
|
98
|
+
return uri
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
SoundLoader.register(SoundGstplayer)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
'''
|
|
2
|
+
AudioPygame: implementation of Sound with Pygame
|
|
3
|
+
|
|
4
|
+
.. warning::
|
|
5
|
+
|
|
6
|
+
Pygame has been deprecated and will be removed in the release after Kivy
|
|
7
|
+
1.11.0.
|
|
8
|
+
'''
|
|
9
|
+
|
|
10
|
+
__all__ = ('SoundPygame', )
|
|
11
|
+
|
|
12
|
+
from kivy.clock import Clock
|
|
13
|
+
from kivy.utils import platform, deprecated
|
|
14
|
+
from kivy.core.audio import Sound, SoundLoader
|
|
15
|
+
|
|
16
|
+
_platform = platform
|
|
17
|
+
try:
|
|
18
|
+
if _platform == 'android':
|
|
19
|
+
try:
|
|
20
|
+
import android.mixer as mixer
|
|
21
|
+
except ImportError:
|
|
22
|
+
# old python-for-android version
|
|
23
|
+
import android_mixer as mixer
|
|
24
|
+
else:
|
|
25
|
+
from pygame import mixer
|
|
26
|
+
except:
|
|
27
|
+
raise
|
|
28
|
+
|
|
29
|
+
# init pygame sound
|
|
30
|
+
mixer.pre_init(44100, -16, 2, 1024)
|
|
31
|
+
mixer.init()
|
|
32
|
+
mixer.set_num_channels(32)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class SoundPygame(Sound):
|
|
36
|
+
|
|
37
|
+
# XXX we don't set __slots__ here, to automatically add
|
|
38
|
+
# a dictionary. We need that to be able to use weakref for
|
|
39
|
+
# SoundPygame object. Otherwise, it failed with:
|
|
40
|
+
# TypeError: cannot create weak reference to 'SoundPygame' object
|
|
41
|
+
# We use our clock in play() method.
|
|
42
|
+
# __slots__ = ('_data', '_channel')
|
|
43
|
+
_check_play_ev = None
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def extensions():
|
|
47
|
+
if _platform == 'android':
|
|
48
|
+
return ('wav', 'ogg', 'mp3', 'm4a')
|
|
49
|
+
return ('wav', 'ogg')
|
|
50
|
+
|
|
51
|
+
@deprecated(
|
|
52
|
+
msg='Pygame has been deprecated and will be removed after 1.11.0')
|
|
53
|
+
def __init__(self, **kwargs):
|
|
54
|
+
self._data = None
|
|
55
|
+
self._channel = None
|
|
56
|
+
super(SoundPygame, self).__init__(**kwargs)
|
|
57
|
+
|
|
58
|
+
def _check_play(self, dt):
|
|
59
|
+
if self._channel is None:
|
|
60
|
+
return False
|
|
61
|
+
if self._channel.get_busy():
|
|
62
|
+
return
|
|
63
|
+
if self.loop:
|
|
64
|
+
def do_loop(dt):
|
|
65
|
+
self.play()
|
|
66
|
+
Clock.schedule_once(do_loop)
|
|
67
|
+
else:
|
|
68
|
+
self.stop()
|
|
69
|
+
return False
|
|
70
|
+
|
|
71
|
+
def play(self):
|
|
72
|
+
if not self._data:
|
|
73
|
+
return
|
|
74
|
+
self._data.set_volume(self.volume)
|
|
75
|
+
self._channel = self._data.play()
|
|
76
|
+
self.start_time = Clock.time()
|
|
77
|
+
# schedule event to check if the sound is still playing or not
|
|
78
|
+
self._check_play_ev = Clock.schedule_interval(self._check_play, 0.1)
|
|
79
|
+
super(SoundPygame, self).play()
|
|
80
|
+
|
|
81
|
+
def stop(self):
|
|
82
|
+
if not self._data:
|
|
83
|
+
return
|
|
84
|
+
self._data.stop()
|
|
85
|
+
# ensure we don't have anymore the callback
|
|
86
|
+
if self._check_play_ev is not None:
|
|
87
|
+
self._check_play_ev.cancel()
|
|
88
|
+
self._check_play_ev = None
|
|
89
|
+
self._channel = None
|
|
90
|
+
super(SoundPygame, self).stop()
|
|
91
|
+
|
|
92
|
+
def load(self):
|
|
93
|
+
self.unload()
|
|
94
|
+
if self.source is None:
|
|
95
|
+
return
|
|
96
|
+
self._data = mixer.Sound(self.source)
|
|
97
|
+
|
|
98
|
+
def unload(self):
|
|
99
|
+
self.stop()
|
|
100
|
+
self._data = None
|
|
101
|
+
|
|
102
|
+
def seek(self, position):
|
|
103
|
+
if not self._data:
|
|
104
|
+
return
|
|
105
|
+
if _platform == 'android' and self._channel:
|
|
106
|
+
self._channel.seek(position)
|
|
107
|
+
|
|
108
|
+
def get_pos(self):
|
|
109
|
+
if self._data is not None and self._channel:
|
|
110
|
+
if _platform == 'android':
|
|
111
|
+
return self._channel.get_pos()
|
|
112
|
+
return Clock.time() - self.start_time
|
|
113
|
+
return 0
|
|
114
|
+
|
|
115
|
+
def on_volume(self, instance, volume):
|
|
116
|
+
if self._data is not None:
|
|
117
|
+
self._data.set_volume(volume)
|
|
118
|
+
|
|
119
|
+
def _get_length(self):
|
|
120
|
+
if _platform == 'android' and self._channel:
|
|
121
|
+
return self._channel.get_length()
|
|
122
|
+
if self._data is not None:
|
|
123
|
+
return self._data.get_length()
|
|
124
|
+
return super(SoundPygame, self)._get_length()
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
SoundLoader.register(SoundPygame)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Camera
|
|
3
|
+
======
|
|
4
|
+
|
|
5
|
+
Core class for acquiring the camera and converting its input into a
|
|
6
|
+
:class:`~kivy.graphics.texture.Texture`.
|
|
7
|
+
|
|
8
|
+
.. versionchanged:: 1.10.0
|
|
9
|
+
The pygst and videocapture providers have been removed.
|
|
10
|
+
|
|
11
|
+
.. versionchanged:: 1.8.0
|
|
12
|
+
There is now 2 distinct Gstreamer implementation: one using Gi/Gst
|
|
13
|
+
working for both Python 2+3 with Gstreamer 1.0, and one using PyGST
|
|
14
|
+
working only for Python 2 + Gstreamer 0.10.
|
|
15
|
+
'''
|
|
16
|
+
|
|
17
|
+
__all__ = ('CameraBase', 'Camera')
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
from kivy.utils import platform
|
|
21
|
+
from kivy.event import EventDispatcher
|
|
22
|
+
from kivy.logger import Logger
|
|
23
|
+
from kivy.core import core_select_lib
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CameraBase(EventDispatcher):
|
|
27
|
+
'''Abstract Camera Widget class.
|
|
28
|
+
|
|
29
|
+
Concrete camera classes must implement initialization and
|
|
30
|
+
frame capturing to a buffer that can be uploaded to the gpu.
|
|
31
|
+
|
|
32
|
+
:Parameters:
|
|
33
|
+
`index`: int
|
|
34
|
+
Source index of the camera.
|
|
35
|
+
`size`: tuple (int, int)
|
|
36
|
+
Size at which the image is drawn. If no size is specified,
|
|
37
|
+
it defaults to the resolution of the camera image.
|
|
38
|
+
`resolution`: tuple (int, int)
|
|
39
|
+
Resolution to try to request from the camera.
|
|
40
|
+
Used in the gstreamer pipeline by forcing the appsink caps
|
|
41
|
+
to this resolution. If the camera doesn't support the resolution,
|
|
42
|
+
a negotiation error might be thrown.
|
|
43
|
+
|
|
44
|
+
:Events:
|
|
45
|
+
`on_load`
|
|
46
|
+
Fired when the camera is loaded and the texture has become
|
|
47
|
+
available.
|
|
48
|
+
`on_texture`
|
|
49
|
+
Fired each time the camera texture is updated.
|
|
50
|
+
'''
|
|
51
|
+
|
|
52
|
+
__events__ = ('on_load', 'on_texture')
|
|
53
|
+
|
|
54
|
+
def __init__(self, **kwargs):
|
|
55
|
+
kwargs.setdefault('stopped', False)
|
|
56
|
+
kwargs.setdefault('resolution', (640, 480))
|
|
57
|
+
kwargs.setdefault('index', 0)
|
|
58
|
+
|
|
59
|
+
self.stopped = kwargs.get('stopped')
|
|
60
|
+
self._resolution = kwargs.get('resolution')
|
|
61
|
+
self._index = kwargs.get('index')
|
|
62
|
+
self._buffer = None
|
|
63
|
+
self._format = 'rgb'
|
|
64
|
+
self._texture = None
|
|
65
|
+
self.capture_device = None
|
|
66
|
+
kwargs.setdefault('size', self._resolution)
|
|
67
|
+
|
|
68
|
+
super(CameraBase, self).__init__()
|
|
69
|
+
|
|
70
|
+
self.init_camera()
|
|
71
|
+
|
|
72
|
+
if not self.stopped:
|
|
73
|
+
self.start()
|
|
74
|
+
|
|
75
|
+
def _set_resolution(self, res):
|
|
76
|
+
self._resolution = res
|
|
77
|
+
self.init_camera()
|
|
78
|
+
|
|
79
|
+
def _get_resolution(self):
|
|
80
|
+
return self._resolution
|
|
81
|
+
|
|
82
|
+
resolution = property(lambda self: self._get_resolution(),
|
|
83
|
+
lambda self, x: self._set_resolution(x),
|
|
84
|
+
doc='Resolution of camera capture (width, height)')
|
|
85
|
+
|
|
86
|
+
def _set_index(self, x):
|
|
87
|
+
if x == self._index:
|
|
88
|
+
return
|
|
89
|
+
self._index = x
|
|
90
|
+
self.init_camera()
|
|
91
|
+
|
|
92
|
+
def _get_index(self):
|
|
93
|
+
return self._x
|
|
94
|
+
|
|
95
|
+
index = property(lambda self: self._get_index(),
|
|
96
|
+
lambda self, x: self._set_index(x),
|
|
97
|
+
doc='Source index of the camera')
|
|
98
|
+
|
|
99
|
+
def _get_texture(self):
|
|
100
|
+
return self._texture
|
|
101
|
+
texture = property(lambda self: self._get_texture(),
|
|
102
|
+
doc='Return the camera texture with the latest capture')
|
|
103
|
+
|
|
104
|
+
def init_camera(self):
|
|
105
|
+
'''Initialize the camera (internal)'''
|
|
106
|
+
pass
|
|
107
|
+
|
|
108
|
+
def start(self):
|
|
109
|
+
'''Start the camera acquire'''
|
|
110
|
+
self.stopped = False
|
|
111
|
+
|
|
112
|
+
def stop(self):
|
|
113
|
+
'''Release the camera'''
|
|
114
|
+
self.stopped = True
|
|
115
|
+
|
|
116
|
+
def _update(self, dt):
|
|
117
|
+
'''Update the camera (internal)'''
|
|
118
|
+
pass
|
|
119
|
+
|
|
120
|
+
def _copy_to_gpu(self):
|
|
121
|
+
'''Copy the buffer into the texture.'''
|
|
122
|
+
if self._texture is None:
|
|
123
|
+
Logger.debug('Camera: copy_to_gpu() failed, _texture is None !')
|
|
124
|
+
return
|
|
125
|
+
self._texture.blit_buffer(self._buffer, colorfmt=self._format)
|
|
126
|
+
self._buffer = None
|
|
127
|
+
self.dispatch('on_texture')
|
|
128
|
+
|
|
129
|
+
def on_texture(self):
|
|
130
|
+
pass
|
|
131
|
+
|
|
132
|
+
def on_load(self):
|
|
133
|
+
pass
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
# Load the appropriate providers
|
|
137
|
+
providers = ()
|
|
138
|
+
|
|
139
|
+
if platform in ['macosx', 'ios']:
|
|
140
|
+
providers += (('avfoundation', 'camera_avfoundation',
|
|
141
|
+
'CameraAVFoundation'), )
|
|
142
|
+
elif platform == 'android':
|
|
143
|
+
providers += (('android', 'camera_android', 'CameraAndroid'), )
|
|
144
|
+
else:
|
|
145
|
+
providers += (('picamera', 'camera_picamera', 'CameraPiCamera'), )
|
|
146
|
+
providers += (('gi', 'camera_gi', 'CameraGi'), )
|
|
147
|
+
|
|
148
|
+
providers += (('opencv', 'camera_opencv', 'CameraOpenCV'), )
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
Camera = core_select_lib('camera', (providers))
|