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,145 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Pango text provider
|
|
3
|
+
===================
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.11.0
|
|
6
|
+
|
|
7
|
+
.. warning::
|
|
8
|
+
The low-level Pango API is experimental, and subject to change without
|
|
9
|
+
notice for as long as this warning is present.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
Installation
|
|
13
|
+
------------
|
|
14
|
+
|
|
15
|
+
1. Install pangoft2 (`apt install libfreetype6-dev libpango1.0-dev
|
|
16
|
+
libpangoft2-1.0-0`) or ensure it is available in pkg-config
|
|
17
|
+
2. Recompile kivy. Check that pangoft2 is found `use_pangoft2 = 1`
|
|
18
|
+
3. Test it! Enforce the text core renderer to pango using environment variable:
|
|
19
|
+
`export KIVY_TEXT=pango`
|
|
20
|
+
|
|
21
|
+
This has been tested on OSX and Linux, Python 3.6.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
Font context types for FontConfig+FreeType2 backend
|
|
25
|
+
---------------------------------------------------
|
|
26
|
+
|
|
27
|
+
* `system://` - `FcInitLoadConfigAndFonts()`
|
|
28
|
+
* `systemconfig://` - `FcInitLoadConfig()`
|
|
29
|
+
* `directory://<PATH>` - `FcInitLoadConfig()` + `FcAppFontAddDir()`
|
|
30
|
+
* `fontconfig://<PATH>` - `FcConfigCreate()` + `FcConfigParseAndLoad()`
|
|
31
|
+
* Any other context name - `FcConfigCreate()`
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
Low-level Pango access
|
|
35
|
+
----------------------
|
|
36
|
+
|
|
37
|
+
Since Kivy currently does its own text layout, the Label and TextInput widgets
|
|
38
|
+
do not take full advantage of Pango. For example, line breaks do not take
|
|
39
|
+
language/script into account, and switching alignment per paragraph (for bi-
|
|
40
|
+
directional text) is not supported. For advanced i18n requirements, we provide
|
|
41
|
+
a simple wrapper around PangoLayout that you can use to render text.
|
|
42
|
+
|
|
43
|
+
* https://developer.gnome.org/pango/1.40/pango-Layout-Objects.html
|
|
44
|
+
* https://developer.gnome.org/pango/1.40/PangoMarkupFormat.html
|
|
45
|
+
* See the `kivy/core/text/_text_pango.pyx` file @ `cdef class KivyPangoLayout`
|
|
46
|
+
for more information. Not all features of PangoLayout are implemented.
|
|
47
|
+
|
|
48
|
+
.. python::
|
|
49
|
+
from kivy.core.window import Window # OpenGL must be initialized
|
|
50
|
+
from kivy.core.text._text_pango import KivyPangoLayout
|
|
51
|
+
layout = KivyPangoLayout('system://')
|
|
52
|
+
layout.set_markup('<span font="20">Hello <b>World!</b></span>')
|
|
53
|
+
tex = layout.render_as_Texture()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
Known limitations
|
|
57
|
+
-----------------
|
|
58
|
+
|
|
59
|
+
* Pango versions older than v1.38 has not been tested. It may work on
|
|
60
|
+
some systems with older pango and newer FontConfig/FreeType2 versions.
|
|
61
|
+
* Kivy's text layout is used, not Pango. This means we do not use Pango's
|
|
62
|
+
line-breaking feature (which is superior to Kivy's), and we can't use
|
|
63
|
+
Pango's bidirectional cursor helpers in TextInput.
|
|
64
|
+
* Font family collisions can happen. For example, if you use a `system://`
|
|
65
|
+
context and add a custom `Arial.ttf`, using `arial` as the `font_family`
|
|
66
|
+
may or may not draw with your custom font (depending on whether or not
|
|
67
|
+
there is already a system-wide "arial" font installed)
|
|
68
|
+
* Rendering is inefficient; the normal way to integrate Pango would be
|
|
69
|
+
using a dedicated PangoLayout per widget. This is not currently practical
|
|
70
|
+
due to missing abstractions in Kivy core (in the current implementation,
|
|
71
|
+
we have a dedicated PangoLayout *per font context,* which is rendered
|
|
72
|
+
once for each LayoutWord)
|
|
73
|
+
'''
|
|
74
|
+
|
|
75
|
+
__all__ = ('LabelPango', )
|
|
76
|
+
|
|
77
|
+
from types import MethodType
|
|
78
|
+
from os.path import isfile
|
|
79
|
+
from kivy.resources import resource_find
|
|
80
|
+
from kivy.core.text import LabelBase, FontContextManagerBase
|
|
81
|
+
from kivy.core.text._text_pango import (
|
|
82
|
+
KivyPangoRenderer,
|
|
83
|
+
kpango_get_extents,
|
|
84
|
+
kpango_get_ascent,
|
|
85
|
+
kpango_get_descent,
|
|
86
|
+
kpango_find_base_dir,
|
|
87
|
+
kpango_font_context_exists,
|
|
88
|
+
kpango_font_context_create,
|
|
89
|
+
kpango_font_context_destroy,
|
|
90
|
+
kpango_font_context_add_font,
|
|
91
|
+
kpango_font_context_list,
|
|
92
|
+
kpango_font_context_list_custom,
|
|
93
|
+
kpango_font_context_list_families)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class LabelPango(LabelBase):
|
|
97
|
+
|
|
98
|
+
_font_family_support = True
|
|
99
|
+
|
|
100
|
+
def __init__(self, *largs, **kwargs):
|
|
101
|
+
self.get_extents = MethodType(kpango_get_extents, self)
|
|
102
|
+
self.get_ascent = MethodType(kpango_get_ascent, self)
|
|
103
|
+
self.get_descent = MethodType(kpango_get_descent, self)
|
|
104
|
+
super(LabelPango, self).__init__(*largs, **kwargs)
|
|
105
|
+
|
|
106
|
+
find_base_direction = staticmethod(kpango_find_base_dir)
|
|
107
|
+
|
|
108
|
+
def _render_begin(self):
|
|
109
|
+
self._rdr = KivyPangoRenderer(*self._size)
|
|
110
|
+
|
|
111
|
+
def _render_text(self, text, x, y):
|
|
112
|
+
self._rdr.render(self, text, x, y)
|
|
113
|
+
|
|
114
|
+
def _render_end(self):
|
|
115
|
+
imgdata = self._rdr.get_ImageData()
|
|
116
|
+
del self._rdr
|
|
117
|
+
return imgdata
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class PangoFontContextManager(FontContextManagerBase):
|
|
121
|
+
create = staticmethod(kpango_font_context_create)
|
|
122
|
+
exists = staticmethod(kpango_font_context_exists)
|
|
123
|
+
destroy = staticmethod(kpango_font_context_destroy)
|
|
124
|
+
list = staticmethod(kpango_font_context_list)
|
|
125
|
+
list_families = staticmethod(kpango_font_context_list_families)
|
|
126
|
+
list_custom = staticmethod(kpango_font_context_list_custom)
|
|
127
|
+
|
|
128
|
+
@staticmethod
|
|
129
|
+
def add_font(font_context, filename, autocreate=True, family=None):
|
|
130
|
+
if not autocreate and not PangoFontContextManager.exists(font_context):
|
|
131
|
+
raise Exception("FontContextManager: Attempt to add font file "
|
|
132
|
+
"'{}' to non-existing context '{}' without "
|
|
133
|
+
"autocreate.".format(filename, font_context))
|
|
134
|
+
if not filename:
|
|
135
|
+
raise Exception("FontContextManager: Cannot add empty font file")
|
|
136
|
+
if not isfile(filename):
|
|
137
|
+
filename = resource_find(filename)
|
|
138
|
+
if not isfile(filename):
|
|
139
|
+
if not filename.endswith('.ttf'):
|
|
140
|
+
filename = resource_find('{}.ttf'.format(filename))
|
|
141
|
+
if filename and isfile(filename):
|
|
142
|
+
return kpango_font_context_add_font(font_context, filename)
|
|
143
|
+
raise Exception("FontContextManager: Attempt to add non-existent "
|
|
144
|
+
"font file: '{}' to context '{}'"
|
|
145
|
+
.format(filename, font_context))
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Text PIL: Draw text with PIL
|
|
3
|
+
'''
|
|
4
|
+
|
|
5
|
+
__all__ = ('LabelPIL', )
|
|
6
|
+
|
|
7
|
+
from PIL import Image, ImageFont, ImageDraw
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
from kivy.compat import text_type
|
|
11
|
+
from kivy.core.text import LabelBase
|
|
12
|
+
from kivy.core.image import ImageData
|
|
13
|
+
|
|
14
|
+
# used for fetching extends before creature image surface
|
|
15
|
+
default_font = ImageFont.load_default()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class LabelPIL(LabelBase):
|
|
19
|
+
_cache = {}
|
|
20
|
+
|
|
21
|
+
def _select_font(self):
|
|
22
|
+
if self.options['font_size'] < 1:
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
fontsize = int(self.options['font_size'])
|
|
26
|
+
fontname = self.options['font_name_r']
|
|
27
|
+
try:
|
|
28
|
+
id = '%s.%s' % (text_type(fontname), text_type(fontsize))
|
|
29
|
+
except UnicodeDecodeError:
|
|
30
|
+
id = '%s.%s' % (fontname, fontsize)
|
|
31
|
+
|
|
32
|
+
if id not in self._cache:
|
|
33
|
+
font = ImageFont.truetype(fontname, fontsize)
|
|
34
|
+
self._cache[id] = font
|
|
35
|
+
|
|
36
|
+
return self._cache[id]
|
|
37
|
+
|
|
38
|
+
def get_extents(self, text):
|
|
39
|
+
font = self._select_font()
|
|
40
|
+
if not font:
|
|
41
|
+
return 0, 0
|
|
42
|
+
|
|
43
|
+
left, top, right, bottom = font.getbbox(text)
|
|
44
|
+
ascent, descent = font.getmetrics()
|
|
45
|
+
|
|
46
|
+
if self.options['limit_render_to_text_bbox']:
|
|
47
|
+
h = bottom - top
|
|
48
|
+
else:
|
|
49
|
+
h = ascent + descent
|
|
50
|
+
w = right - left
|
|
51
|
+
|
|
52
|
+
return w, h
|
|
53
|
+
|
|
54
|
+
def get_cached_extents(self):
|
|
55
|
+
return self.get_extents
|
|
56
|
+
|
|
57
|
+
def _render_begin(self):
|
|
58
|
+
# create a surface, context, font...
|
|
59
|
+
self._pil_im = Image.new('RGBA', self._size, color=(255, 255, 255, 0))
|
|
60
|
+
self._pil_draw = ImageDraw.Draw(self._pil_im)
|
|
61
|
+
|
|
62
|
+
def _render_text(self, text, x, y):
|
|
63
|
+
font = self._select_font()
|
|
64
|
+
if not font:
|
|
65
|
+
return
|
|
66
|
+
|
|
67
|
+
color = tuple([int(c * 255) for c in self.options['color']])
|
|
68
|
+
|
|
69
|
+
# Adjust x and y position to avoid text cutoff
|
|
70
|
+
if self.options['limit_render_to_text_bbox']:
|
|
71
|
+
bbox = font.getbbox(text)
|
|
72
|
+
x -= bbox[0]
|
|
73
|
+
y -= bbox[1]
|
|
74
|
+
|
|
75
|
+
self._pil_draw.text((int(x), int(y)), text, font=font, fill=color)
|
|
76
|
+
|
|
77
|
+
def _render_end(self):
|
|
78
|
+
data = ImageData(self._size[0], self._size[1],
|
|
79
|
+
self._pil_im.mode.lower(), self._pil_im.tobytes())
|
|
80
|
+
|
|
81
|
+
del self._pil_im
|
|
82
|
+
del self._pil_draw
|
|
83
|
+
|
|
84
|
+
return data
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Text Pygame: Draw text 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__ = ('LabelPygame', )
|
|
11
|
+
|
|
12
|
+
from kivy.compat import PY2
|
|
13
|
+
from kivy.core.text import LabelBase
|
|
14
|
+
from kivy.core.image import ImageData
|
|
15
|
+
from kivy.utils import deprecated
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
import pygame
|
|
19
|
+
except:
|
|
20
|
+
raise
|
|
21
|
+
|
|
22
|
+
pygame_cache = {}
|
|
23
|
+
pygame_font_handles = {}
|
|
24
|
+
pygame_cache_order = []
|
|
25
|
+
|
|
26
|
+
# init pygame font
|
|
27
|
+
try:
|
|
28
|
+
pygame.ftfont.init()
|
|
29
|
+
except:
|
|
30
|
+
pygame.font.init()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class LabelPygame(LabelBase):
|
|
34
|
+
|
|
35
|
+
@deprecated(
|
|
36
|
+
msg='Pygame has been deprecated and will be removed after 1.11.0')
|
|
37
|
+
def __init__(self, *largs, **kwargs):
|
|
38
|
+
super(LabelPygame, self).__init__(*largs, **kwargs)
|
|
39
|
+
|
|
40
|
+
def _get_font_id(self):
|
|
41
|
+
return '|'.join([str(self.options[x]) for x in
|
|
42
|
+
('font_size', 'font_name_r', 'bold', 'italic')])
|
|
43
|
+
|
|
44
|
+
def _get_font(self):
|
|
45
|
+
fontid = self._get_font_id()
|
|
46
|
+
if fontid not in pygame_cache:
|
|
47
|
+
# try first the file if it's a filename
|
|
48
|
+
font_handle = fontobject = None
|
|
49
|
+
fontname = self.options['font_name_r']
|
|
50
|
+
ext = fontname.rsplit('.', 1)
|
|
51
|
+
if len(ext) == 2:
|
|
52
|
+
# try to open the font if it has an extension
|
|
53
|
+
font_handle = open(fontname, 'rb')
|
|
54
|
+
fontobject = pygame.font.Font(font_handle,
|
|
55
|
+
int(self.options['font_size']))
|
|
56
|
+
|
|
57
|
+
# fallback to search a system font
|
|
58
|
+
if fontobject is None:
|
|
59
|
+
# try to search the font
|
|
60
|
+
font = pygame.font.match_font(
|
|
61
|
+
self.options['font_name_r'].replace(' ', ''),
|
|
62
|
+
bold=self.options['bold'],
|
|
63
|
+
italic=self.options['italic'])
|
|
64
|
+
|
|
65
|
+
# fontobject
|
|
66
|
+
fontobject = pygame.font.Font(font,
|
|
67
|
+
int(self.options['font_size']))
|
|
68
|
+
pygame_cache[fontid] = fontobject
|
|
69
|
+
pygame_font_handles[fontid] = font_handle
|
|
70
|
+
pygame_cache_order.append(fontid)
|
|
71
|
+
|
|
72
|
+
# to prevent too much file open, limit the number of opened fonts to 64
|
|
73
|
+
while len(pygame_cache_order) > 64:
|
|
74
|
+
popid = pygame_cache_order.pop(0)
|
|
75
|
+
del pygame_cache[popid]
|
|
76
|
+
font_handle = pygame_font_handles.pop(popid)
|
|
77
|
+
if font_handle is not None:
|
|
78
|
+
font_handle.close()
|
|
79
|
+
|
|
80
|
+
return pygame_cache[fontid]
|
|
81
|
+
|
|
82
|
+
def get_ascent(self):
|
|
83
|
+
return self._get_font().get_ascent()
|
|
84
|
+
|
|
85
|
+
def get_descent(self):
|
|
86
|
+
return self._get_font().get_descent()
|
|
87
|
+
|
|
88
|
+
def get_extents(self, text):
|
|
89
|
+
return self._get_font().size(text)
|
|
90
|
+
|
|
91
|
+
def get_cached_extents(self):
|
|
92
|
+
return self._get_font().size
|
|
93
|
+
|
|
94
|
+
def _render_begin(self):
|
|
95
|
+
self._pygame_surface = pygame.Surface(self._size, pygame.SRCALPHA, 32)
|
|
96
|
+
self._pygame_surface.fill((0, 0, 0, 0))
|
|
97
|
+
|
|
98
|
+
def _render_text(self, text, x, y):
|
|
99
|
+
font = self._get_font()
|
|
100
|
+
color = [c * 255 for c in self.options['color']]
|
|
101
|
+
color[0], color[2] = color[2], color[0]
|
|
102
|
+
try:
|
|
103
|
+
text = font.render(text, True, color)
|
|
104
|
+
text.set_colorkey(color)
|
|
105
|
+
self._pygame_surface.blit(text, (x, y), None,
|
|
106
|
+
pygame.BLEND_RGBA_ADD)
|
|
107
|
+
except pygame.error:
|
|
108
|
+
pass
|
|
109
|
+
|
|
110
|
+
def _render_end(self):
|
|
111
|
+
w, h = self._size
|
|
112
|
+
data = ImageData(w, h,
|
|
113
|
+
'rgba', self._pygame_surface.get_buffer().raw)
|
|
114
|
+
|
|
115
|
+
del self._pygame_surface
|
|
116
|
+
|
|
117
|
+
return data
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'''
|
|
2
|
+
SDL2 text provider
|
|
3
|
+
==================
|
|
4
|
+
|
|
5
|
+
Based on SDL2 + SDL2_ttf
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('LabelSDL2', )
|
|
9
|
+
|
|
10
|
+
from kivy.compat import PY2
|
|
11
|
+
from kivy.core.text import LabelBase
|
|
12
|
+
try:
|
|
13
|
+
from kivy.core.text._text_sdl2 import (_SurfaceContainer, _get_extents,
|
|
14
|
+
_get_fontdescent, _get_fontascent)
|
|
15
|
+
except ImportError:
|
|
16
|
+
from kivy.core import handle_win_lib_import_error
|
|
17
|
+
handle_win_lib_import_error(
|
|
18
|
+
'text', 'sdl2', 'kivy.core.text._text_sdl2')
|
|
19
|
+
raise
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LabelSDL2(LabelBase):
|
|
23
|
+
|
|
24
|
+
def _get_font_id(self):
|
|
25
|
+
return '|'.join([str(self.options[x]) for x
|
|
26
|
+
in ('font_size', 'font_name_r', 'bold',
|
|
27
|
+
'italic', 'underline', 'strikethrough')])
|
|
28
|
+
|
|
29
|
+
def get_extents(self, text):
|
|
30
|
+
try:
|
|
31
|
+
if PY2:
|
|
32
|
+
text = text.encode('UTF-8')
|
|
33
|
+
except:
|
|
34
|
+
pass
|
|
35
|
+
return _get_extents(self, text)
|
|
36
|
+
|
|
37
|
+
def get_descent(self):
|
|
38
|
+
return _get_fontdescent(self)
|
|
39
|
+
|
|
40
|
+
def get_ascent(self):
|
|
41
|
+
return _get_fontascent(self)
|
|
42
|
+
|
|
43
|
+
def _render_begin(self):
|
|
44
|
+
self._surface = _SurfaceContainer(self._size[0], self._size[1])
|
|
45
|
+
|
|
46
|
+
def _render_text(self, text, x, y):
|
|
47
|
+
self._surface.render(self, text, x, y)
|
|
48
|
+
|
|
49
|
+
def _render_end(self):
|
|
50
|
+
return self._surface.get_data()
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Video
|
|
3
|
+
=====
|
|
4
|
+
|
|
5
|
+
Core class for reading video files and managing the video
|
|
6
|
+
:class:`~kivy.graphics.texture.Texture`.
|
|
7
|
+
|
|
8
|
+
.. versionchanged:: 1.10.0
|
|
9
|
+
The pyglet, pygst and gi providers have been removed.
|
|
10
|
+
|
|
11
|
+
.. versionchanged:: 1.8.0
|
|
12
|
+
There are now 2 distinct Gstreamer implementations: 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
|
+
.. note::
|
|
17
|
+
|
|
18
|
+
Recording is not supported.
|
|
19
|
+
'''
|
|
20
|
+
|
|
21
|
+
__all__ = ('VideoBase', 'Video')
|
|
22
|
+
|
|
23
|
+
from kivy.clock import Clock
|
|
24
|
+
from kivy.core import core_select_lib
|
|
25
|
+
from kivy.event import EventDispatcher
|
|
26
|
+
from kivy.logger import Logger
|
|
27
|
+
from kivy.compat import PY2
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class VideoBase(EventDispatcher):
|
|
31
|
+
'''VideoBase, a class used to implement a video reader.
|
|
32
|
+
|
|
33
|
+
:Parameters:
|
|
34
|
+
`filename`: str
|
|
35
|
+
Filename of the video. Can be a file or an URI.
|
|
36
|
+
`eos`: str, defaults to 'pause'
|
|
37
|
+
Action to take when EOS is hit. Can be one of 'pause', 'stop' or
|
|
38
|
+
'loop'.
|
|
39
|
+
|
|
40
|
+
.. versionchanged:: 1.4.0
|
|
41
|
+
added 'pause'
|
|
42
|
+
|
|
43
|
+
`async`: bool, defaults to True
|
|
44
|
+
Load the video asynchronously (may be not supported by all
|
|
45
|
+
providers).
|
|
46
|
+
`autoplay`: bool, defaults to False
|
|
47
|
+
Auto play the video on init.
|
|
48
|
+
|
|
49
|
+
:Events:
|
|
50
|
+
`on_eos`
|
|
51
|
+
Fired when EOS is hit.
|
|
52
|
+
`on_load`
|
|
53
|
+
Fired when the video is loaded and the texture is available.
|
|
54
|
+
`on_frame`
|
|
55
|
+
Fired when a new frame is written to the texture.
|
|
56
|
+
'''
|
|
57
|
+
|
|
58
|
+
__slots__ = ('_wantplay', '_buffer', '_filename', '_texture',
|
|
59
|
+
'_volume', 'eos', '_state', '_async', '_autoplay')
|
|
60
|
+
|
|
61
|
+
__events__ = ('on_eos', 'on_load', 'on_frame')
|
|
62
|
+
|
|
63
|
+
def __init__(self, **kwargs):
|
|
64
|
+
kwargs.setdefault('filename', None)
|
|
65
|
+
kwargs.setdefault('eos', 'stop')
|
|
66
|
+
kwargs.setdefault('async', True)
|
|
67
|
+
kwargs.setdefault('autoplay', False)
|
|
68
|
+
|
|
69
|
+
super(VideoBase, self).__init__()
|
|
70
|
+
|
|
71
|
+
self._wantplay = False
|
|
72
|
+
self._buffer = None
|
|
73
|
+
self._filename = None
|
|
74
|
+
self._texture = None
|
|
75
|
+
self._volume = 1.
|
|
76
|
+
self._state = ''
|
|
77
|
+
|
|
78
|
+
self._autoplay = kwargs.get('autoplay')
|
|
79
|
+
self._async = kwargs.get('async')
|
|
80
|
+
self.eos = kwargs.get('eos')
|
|
81
|
+
if self.eos == 'pause':
|
|
82
|
+
Logger.warning("'pause' is deprecated. Use 'stop' instead.")
|
|
83
|
+
self.eos = 'stop'
|
|
84
|
+
self.filename = kwargs.get('filename')
|
|
85
|
+
|
|
86
|
+
Clock.schedule_interval(self._update, 1 / 30.)
|
|
87
|
+
|
|
88
|
+
if self._autoplay:
|
|
89
|
+
self.play()
|
|
90
|
+
|
|
91
|
+
def __del__(self):
|
|
92
|
+
self.unload()
|
|
93
|
+
|
|
94
|
+
def on_eos(self):
|
|
95
|
+
pass
|
|
96
|
+
|
|
97
|
+
def on_load(self):
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
def on_frame(self):
|
|
101
|
+
pass
|
|
102
|
+
|
|
103
|
+
def _get_filename(self):
|
|
104
|
+
return self._filename
|
|
105
|
+
|
|
106
|
+
def _set_filename(self, filename):
|
|
107
|
+
if filename == self._filename:
|
|
108
|
+
return
|
|
109
|
+
self.unload()
|
|
110
|
+
self._filename = filename
|
|
111
|
+
if self._filename is None:
|
|
112
|
+
return
|
|
113
|
+
self.load()
|
|
114
|
+
|
|
115
|
+
filename = property(lambda self: self._get_filename(),
|
|
116
|
+
lambda self, x: self._set_filename(x),
|
|
117
|
+
doc='Get/set the filename/uri of the current video')
|
|
118
|
+
|
|
119
|
+
def _get_position(self):
|
|
120
|
+
return 0
|
|
121
|
+
|
|
122
|
+
def _set_position(self, pos):
|
|
123
|
+
self.seek(pos)
|
|
124
|
+
|
|
125
|
+
position = property(lambda self: self._get_position(),
|
|
126
|
+
lambda self, x: self._set_position(x),
|
|
127
|
+
doc='Get/set the position in the video (in seconds)')
|
|
128
|
+
|
|
129
|
+
def _get_volume(self):
|
|
130
|
+
return self._volume
|
|
131
|
+
|
|
132
|
+
def _set_volume(self, volume):
|
|
133
|
+
self._volume = volume
|
|
134
|
+
|
|
135
|
+
volume = property(lambda self: self._get_volume(),
|
|
136
|
+
lambda self, x: self._set_volume(x),
|
|
137
|
+
doc='Get/set the volume in the video (1.0 = 100%)')
|
|
138
|
+
|
|
139
|
+
def _get_duration(self):
|
|
140
|
+
return 0
|
|
141
|
+
|
|
142
|
+
duration = property(lambda self: self._get_duration(),
|
|
143
|
+
doc='Get the video duration (in seconds)')
|
|
144
|
+
|
|
145
|
+
def _get_texture(self):
|
|
146
|
+
return self._texture
|
|
147
|
+
|
|
148
|
+
texture = property(lambda self: self._get_texture(),
|
|
149
|
+
doc='Get the video texture')
|
|
150
|
+
|
|
151
|
+
def _get_state(self):
|
|
152
|
+
return self._state
|
|
153
|
+
|
|
154
|
+
state = property(lambda self: self._get_state(),
|
|
155
|
+
doc='Get the video playing status')
|
|
156
|
+
|
|
157
|
+
def _do_eos(self, *args):
|
|
158
|
+
'''
|
|
159
|
+
.. versionchanged:: 1.4.0
|
|
160
|
+
Now dispatches the `on_eos` event.
|
|
161
|
+
'''
|
|
162
|
+
if self.eos == 'pause':
|
|
163
|
+
self.pause()
|
|
164
|
+
elif self.eos == 'stop':
|
|
165
|
+
self.stop()
|
|
166
|
+
elif self.eos == 'loop':
|
|
167
|
+
self.position = 0
|
|
168
|
+
self.play()
|
|
169
|
+
|
|
170
|
+
self.dispatch('on_eos')
|
|
171
|
+
|
|
172
|
+
def _update(self, dt):
|
|
173
|
+
'''Update the video content to texture.
|
|
174
|
+
'''
|
|
175
|
+
pass
|
|
176
|
+
|
|
177
|
+
def seek(self, percent, precise=True):
|
|
178
|
+
'''Move to position as percentage (strictly, a proportion from
|
|
179
|
+
0 - 1) of the duration'''
|
|
180
|
+
pass
|
|
181
|
+
|
|
182
|
+
def stop(self):
|
|
183
|
+
'''Stop the video playing'''
|
|
184
|
+
self._state = ''
|
|
185
|
+
|
|
186
|
+
def pause(self):
|
|
187
|
+
'''Pause the video
|
|
188
|
+
|
|
189
|
+
.. versionadded:: 1.4.0
|
|
190
|
+
'''
|
|
191
|
+
self._state = 'paused'
|
|
192
|
+
|
|
193
|
+
def play(self):
|
|
194
|
+
'''Play the video'''
|
|
195
|
+
self._state = 'playing'
|
|
196
|
+
|
|
197
|
+
def load(self):
|
|
198
|
+
'''Load the video from the current filename'''
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
def unload(self):
|
|
202
|
+
'''Unload the actual video'''
|
|
203
|
+
self._state = ''
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
# Load the appropriate provider
|
|
207
|
+
video_providers = []
|
|
208
|
+
try:
|
|
209
|
+
from kivy.lib.gstplayer import GstPlayer # NOQA
|
|
210
|
+
video_providers += [('gstplayer', 'video_gstplayer', 'VideoGstplayer')]
|
|
211
|
+
except ImportError:
|
|
212
|
+
pass
|
|
213
|
+
video_providers += [
|
|
214
|
+
('ffmpeg', 'video_ffmpeg', 'VideoFFMpeg'),
|
|
215
|
+
('ffpyplayer', 'video_ffpyplayer', 'VideoFFPy'),
|
|
216
|
+
('null', 'video_null', 'VideoNull')]
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
Video = core_select_lib('video', video_providers)
|