Kivy-examples 2.3.1.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/monkey.obj +7966 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/objloader.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/simple.glsl +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/editor.kv +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/main.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/compass.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/needle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/rose.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/main.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/takepicture.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/animation/animate.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite.py +152 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite_data/testkvdir.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_build.py +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_config.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv_in_template1.py +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/template1/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/testkvfile.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_advanced.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_basic.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_advanced.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_basic.py +58 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12908_sweet_trip_mm_clap_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12909_sweet_trip_mm_clap_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12910_sweet_trip_mm_clap_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12911_sweet_trip_mm_hat_cl.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12913_sweet_trip_mm_kick_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12914_sweet_trip_mm_kick_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12915_sweet_trip_mm_kick_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12916_sweet_trip_mm_kwik_mod_01.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12917_sweet_trip_mm_kwik_mod_02.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12918_sweet_trip_mm_kwik_mod_03.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12919_sweet_trip_mm_kwik_mod_04.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12920_sweet_trip_mm_kwik_mod_05.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12921_sweet_trip_mm_kwik_mod_06.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12922_sweet_trip_mm_kwik_mod_07.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12923_sweet_trip_mm_metal_clave.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12925_sweet_trip_mm_sweep_x.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12926_sweet_trip_mm_sweep_y.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12927_sweet_trip_mm_sweep_z.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/audio.kv +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/main.py +81 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/pitch.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/camera/main.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/bezier.py +105 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/canvas_stress.py +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/circle.py +84 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/fbo_canvas.py +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/kiwi.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines_extended.py +183 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh.py +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh_manipulation.py +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture1.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture2.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/multitexture.py +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/repeat_texture.py +65 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rotation.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rounded_rectangle.py +153 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/scale.py +37 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/stencil_canvas.py +85 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/tesselate.py +146 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture_example_image.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/1.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/2.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/3.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/root.kv +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/main.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_image.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_video.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/camera_puzzle.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/AnchorLayoutContainer.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/BoxLayoutContainer.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ButtonContainer.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/CheckBoxContainer.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FileChooserContainer.kv +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FloatLayoutContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/GridLayoutContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/LabelContainer.kv +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/MediaContainer.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PlaygroundContainer.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PopupContainer.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ProgressBarContainer.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/RestContainer.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ScatterContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/SelectorsContainer.kv +10 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/StackLayoutContainer.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/TextContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/kivycatalog.kv +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/main.py +192 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.kv +117 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.py +180 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/helpers.py +30 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.kv +164 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.py +276 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/main.py +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/multistroke.kv +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.kv +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.py +97 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Bubbles.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Ill1.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Wall.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/main.py +73 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/pictures.kv +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/main.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/shadereditor.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/README.txt +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/background.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/README +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/bug.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-left.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-right.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/accordions.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/bubbles.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/buttons.kv +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/carousel.kv +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/checkboxes.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/codeinput.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/dropdown.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/filechoosers.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/popups.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/progressbar.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/rstdocument.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/scatter.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/screenmanager.kv +46 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/sliders.kv +55 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/spinner.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/splitter.kv +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/switches.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/tabbedpanel + layouts.kv +69 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/textinputs.kv +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/togglebutton.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/main.py +243 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/showcase.kv +100 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/README.txt +12 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/main.py +170 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/particle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/touchtracer.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_client_app.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_server_app.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/twistd_app.py +66 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/gesture_board.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/my_gestures.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/controller.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/main.py +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/1_skeleton.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/2_print_touch.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/3_draw_ellipse.py +22 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/4_draw_line.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/5_random_colors.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/6_button.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/quickstart/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/layout.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/main.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/test.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/main.py +226 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/numeric.json +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/README.txt +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/kinectviewer.py +283 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_camera.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_fbo.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_layout.kv +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_logo.kv +36 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_scatter.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_stencil.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_video.kv +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/builder_template.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/id_in_kv.py +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/kv_and_py.py +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kivy.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kvrun.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/clipboard.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/custom_titlebar.py +56 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/imagesave.py +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/joystick.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/multiple_dropfile.py +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/on_textedit_event.py +104 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/opacitywindow.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapecollisions.py +397 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapedwindow.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/two_panes.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/urlrequest.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/main.py +122 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.py +86 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.kv +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.py +102 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/tex3.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/benchmark.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/cloud.svg +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main-smaa.py +155 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/music.svg +68 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/rotated.svg +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/ship.svg +181 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/sun.svg +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/tiger.svg +813 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/text/pango_demo.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/data/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/main.py +163 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/note.kv +154 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/main.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/pong.kv +2 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/pong.kv +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/main.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/pong.kv +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/main.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/pong.kv +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/main.py +75 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/accordion_1.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/actionbar.py +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/asyncimage.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/boxlayout_poshint.py +54 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/bubble_test.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/camera.py +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/carousel_buttons.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.mpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinput.py +225 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinputtest.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorpicker.py +234 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorusage.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/compound_selection.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/customcollide.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget2.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget3_advanced.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/fbowidget.py +111 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/focus_behavior.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/image_mipmap.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/keyboardlistener.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_mipmap.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_sizing.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_text_size.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_with_markup.py +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/lang_dynamic_classes.py +18 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/pagelayout.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/popup_with_kv.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/basic_data.py +124 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/infinite_scrolling.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/key_viewclass.py +149 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/messenger.py +196 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/pull_to_refresh.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/rv_animate_items.py +109 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/rstexample.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/screenmanager.py +106 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.py +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/bird.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white_animated.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/cube.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/simple_cv_joint_animated.gif +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.kv +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.py +150 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/__init__.py +7 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/custom_button.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/settings.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/shorten_text.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/spinner.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/splitter.py +74 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbed_panel_showcase.py +316 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbedpanel.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.kv +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textinput.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/unicode_textinput.py +244 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/videoplayer.py +26 -0
- Kivy_examples-2.3.1.dev0.dist-info/AUTHORS +66 -0
- Kivy_examples-2.3.1.dev0.dist-info/LICENSE +21 -0
- Kivy_examples-2.3.1.dev0.dist-info/METADATA +382 -0
- Kivy_examples-2.3.1.dev0.dist-info/RECORD +624 -0
- Kivy_examples-2.3.1.dev0.dist-info/WHEEL +5 -0
- Kivy_examples-2.3.1.dev0.dist-info/dependency_links.txt +1 -0
- Kivy_examples-2.3.1.dev0.dist-info/top_level.txt +1 -0
- kivy/__init__.py +519 -0
- kivy/_version.py +18 -0
- kivy/animation.py +831 -0
- kivy/app.py +1213 -0
- kivy/atlas.py +456 -0
- kivy/base.py +617 -0
- kivy/cache.py +262 -0
- kivy/clock.py +1172 -0
- kivy/compat.py +82 -0
- kivy/config.py +1004 -0
- kivy/context.py +102 -0
- kivy/core/__init__.py +247 -0
- kivy/core/audio/__init__.py +223 -0
- kivy/core/audio/audio_android.py +104 -0
- kivy/core/audio/audio_avplayer.py +82 -0
- kivy/core/audio/audio_ffpyplayer.py +185 -0
- kivy/core/audio/audio_gstplayer.py +101 -0
- kivy/core/audio/audio_pygame.py +127 -0
- kivy/core/camera/__init__.py +151 -0
- kivy/core/camera/camera_android.py +206 -0
- kivy/core/camera/camera_gi.py +170 -0
- kivy/core/camera/camera_opencv.py +163 -0
- kivy/core/camera/camera_picamera.py +96 -0
- kivy/core/clipboard/__init__.py +157 -0
- kivy/core/clipboard/_clipboard_ext.py +36 -0
- kivy/core/clipboard/clipboard_android.py +91 -0
- kivy/core/clipboard/clipboard_dbusklipper.py +41 -0
- kivy/core/clipboard/clipboard_dummy.py +26 -0
- kivy/core/clipboard/clipboard_gtk3.py +47 -0
- kivy/core/clipboard/clipboard_nspaste.py +44 -0
- kivy/core/clipboard/clipboard_pygame.py +67 -0
- kivy/core/clipboard/clipboard_sdl2.py +36 -0
- kivy/core/clipboard/clipboard_winctypes.py +107 -0
- kivy/core/clipboard/clipboard_xclip.py +29 -0
- kivy/core/clipboard/clipboard_xsel.py +26 -0
- kivy/core/gl/__init__.py +90 -0
- kivy/core/image/__init__.py +996 -0
- kivy/core/image/img_dds.py +40 -0
- kivy/core/image/img_ffpyplayer.py +87 -0
- kivy/core/image/img_pil.py +123 -0
- kivy/core/image/img_pygame.py +119 -0
- kivy/core/image/img_sdl2.py +66 -0
- kivy/core/image/img_tex.py +58 -0
- kivy/core/spelling/__init__.py +135 -0
- kivy/core/spelling/spelling_enchant.py +50 -0
- kivy/core/spelling/spelling_osxappkit.py +64 -0
- kivy/core/text/__init__.py +1090 -0
- kivy/core/text/markup.py +893 -0
- kivy/core/text/text_pango.py +145 -0
- kivy/core/text/text_pil.py +84 -0
- kivy/core/text/text_pygame.py +117 -0
- kivy/core/text/text_sdl2.py +50 -0
- kivy/core/video/__init__.py +219 -0
- kivy/core/video/video_ffmpeg.py +106 -0
- kivy/core/video/video_ffpyplayer.py +449 -0
- kivy/core/video/video_gstplayer.py +140 -0
- kivy/core/video/video_null.py +12 -0
- kivy/core/window/__init__.py +2515 -0
- kivy/core/window/window_egl_rpi.py +86 -0
- kivy/core/window/window_pygame.py +441 -0
- kivy/core/window/window_sdl2.py +999 -0
- kivy/deps/__init__.py +6 -0
- kivy/effects/__init__.py +23 -0
- kivy/effects/dampedscroll.py +114 -0
- kivy/effects/kinetic.py +193 -0
- kivy/effects/opacityscroll.py +27 -0
- kivy/effects/scroll.py +126 -0
- kivy/event.py +12 -0
- kivy/eventmanager/__init__.py +185 -0
- kivy/extras/__init__.py +0 -0
- kivy/extras/highlight.py +52 -0
- kivy/factory.py +190 -0
- kivy/factory_registers.py +201 -0
- kivy/garden/__init__.py +186 -0
- kivy/geometry.py +121 -0
- kivy/gesture.py +424 -0
- kivy/graphics/__init__.py +126 -0
- kivy/graphics/cgl_backend/__init__.py +0 -0
- kivy/input/__init__.py +39 -0
- kivy/input/factory.py +35 -0
- kivy/input/motionevent.py +587 -0
- kivy/input/postproc/__init__.py +27 -0
- kivy/input/postproc/calibration.py +200 -0
- kivy/input/postproc/dejitter.py +74 -0
- kivy/input/postproc/doubletap.py +101 -0
- kivy/input/postproc/ignorelist.py +47 -0
- kivy/input/postproc/retaintouch.py +93 -0
- kivy/input/postproc/tripletap.py +106 -0
- kivy/input/provider.py +40 -0
- kivy/input/providers/__init__.py +68 -0
- kivy/input/providers/androidjoystick.py +117 -0
- kivy/input/providers/hidinput.py +778 -0
- kivy/input/providers/leapfinger.py +113 -0
- kivy/input/providers/linuxwacom.py +396 -0
- kivy/input/providers/mactouch.py +220 -0
- kivy/input/providers/mouse.py +424 -0
- kivy/input/providers/mtdev.py +380 -0
- kivy/input/providers/probesysfs.py +254 -0
- kivy/input/providers/tuio.py +326 -0
- kivy/input/providers/wm_common.py +162 -0
- kivy/input/providers/wm_pen.py +121 -0
- kivy/input/providers/wm_touch.py +157 -0
- kivy/input/recorder.py +335 -0
- kivy/input/shape.py +27 -0
- kivy/interactive.py +335 -0
- kivy/lang/__init__.py +883 -0
- kivy/lang/builder.py +1004 -0
- kivy/lang/parser.py +822 -0
- kivy/lib/__init__.py +21 -0
- kivy/lib/ddsfile.py +419 -0
- kivy/lib/gstplayer/__init__.py +27 -0
- kivy/lib/mtdev.py +254 -0
- kivy/lib/vidcore_lite/__init__.py +0 -0
- kivy/loader.py +579 -0
- kivy/logger.py +646 -0
- kivy/metrics.py +421 -0
- kivy/modules/__init__.py +300 -0
- kivy/modules/_webdebugger.py +200 -0
- kivy/modules/console.py +1059 -0
- kivy/modules/cursor.py +75 -0
- kivy/modules/inspector.py +755 -0
- kivy/modules/joycursor.py +299 -0
- kivy/modules/keybinding.py +64 -0
- kivy/modules/monitor.py +90 -0
- kivy/modules/recorder.py +94 -0
- kivy/modules/screen.py +183 -0
- kivy/modules/showborder.py +33 -0
- kivy/modules/touchring.py +97 -0
- kivy/modules/webdebugger.py +30 -0
- kivy/multistroke.py +1477 -0
- kivy/network/__init__.py +7 -0
- kivy/network/urlrequest.py +794 -0
- kivy/parser.py +154 -0
- kivy/resources.py +102 -0
- kivy/storage/__init__.py +405 -0
- kivy/storage/dictstore.py +98 -0
- kivy/storage/jsonstore.py +92 -0
- kivy/storage/redisstore.py +103 -0
- kivy/support.py +267 -0
- kivy/tests/__init__.py +11 -0
- kivy/tests/async_common.py +568 -0
- kivy/tests/common.py +524 -0
- kivy/tests/conftest.py +33 -0
- kivy/tests/fixtures.py +169 -0
- kivy/tests/perf_test_textinput.py +195 -0
- kivy/tests/pyinstaller/simple_widget/main.py +12 -0
- kivy/tests/pyinstaller/simple_widget/project/__init__.py +0 -0
- kivy/tests/pyinstaller/simple_widget/project/widget.py +12 -0
- kivy/tests/pyinstaller/test_pyinstaller.py +115 -0
- kivy/tests/pyinstaller/video_widget/main.py +6 -0
- kivy/tests/pyinstaller/video_widget/project/__init__.py +38 -0
- kivy/tests/test_animations.py +415 -0
- kivy/tests/test_app.py +216 -0
- kivy/tests/test_audio.py +69 -0
- kivy/tests/test_benchmark.py +292 -0
- kivy/tests/test_clipboard.py +48 -0
- kivy/tests/test_clock.py +292 -0
- kivy/tests/test_compat.py +6 -0
- kivy/tests/test_config.py +35 -0
- kivy/tests/test_coverage.py +83 -0
- kivy/tests/test_doc_gallery.py +38 -0
- kivy/tests/test_environ_cli.py +50 -0
- kivy/tests/test_fbo_py2py3.py +74 -0
- kivy/tests/test_filechooser.py +11 -0
- kivy/tests/test_filechooser_unicode.py +82 -0
- kivy/tests/test_fonts.py +42 -0
- kivy/tests/test_garden.py +23 -0
- kivy/tests/test_graphics.py +1149 -0
- kivy/tests/test_graphics_svg.py +84 -0
- kivy/tests/test_image.py +74 -0
- kivy/tests/test_imageloader.py +485 -0
- kivy/tests/test_invalid_lang.py +42 -0
- kivy/tests/test_issues/test_6315.py +55 -0
- kivy/tests/test_issues/test_issue_1084.py +47 -0
- kivy/tests/test_issues/test_issue_1091.py +19 -0
- kivy/tests/test_issues/test_issue_599.py +21 -0
- kivy/tests/test_issues/test_issue_609.py +19 -0
- kivy/tests/test_issues/test_issue_6909.py +28 -0
- kivy/tests/test_issues/test_issue_883.py +12 -0
- kivy/tests/test_kivy_init.py +30 -0
- kivy/tests/test_knspace.py +247 -0
- kivy/tests/test_lang.py +431 -0
- kivy/tests/test_lang_complex.py +87 -0
- kivy/tests/test_lang_pre_process_and_post_process.py +394 -0
- kivy/tests/test_logger.py +516 -0
- kivy/tests/test_metrics.py +30 -0
- kivy/tests/test_module_inspector.py +382 -0
- kivy/tests/test_motion_event.py +44 -0
- kivy/tests/test_mouse_hover_event.py +249 -0
- kivy/tests/test_mouse_multitouchsim.py +554 -0
- kivy/tests/test_multistroke.py +389 -0
- kivy/tests/test_properties.py +1332 -0
- kivy/tests/test_resources.py +79 -0
- kivy/tests/test_rst_replace.py +63 -0
- kivy/tests/test_screen.py +38 -0
- kivy/tests/test_storage.py +135 -0
- kivy/tests/test_uix_actionbar.py +363 -0
- kivy/tests/test_uix_anchorlayout.py +79 -0
- kivy/tests/test_uix_asyncimage.py +133 -0
- kivy/tests/test_uix_boxlayout.py +94 -0
- kivy/tests/test_uix_bubble.py +425 -0
- kivy/tests/test_uix_carousel.py +93 -0
- kivy/tests/test_uix_colorpicker.py +77 -0
- kivy/tests/test_uix_dropdown.py +91 -0
- kivy/tests/test_uix_gridlayout.py +244 -0
- kivy/tests/test_uix_layout.py +16 -0
- kivy/tests/test_uix_modal.py +101 -0
- kivy/tests/test_uix_recyclegridlayout.py +383 -0
- kivy/tests/test_uix_relativelayout.py +30 -0
- kivy/tests/test_uix_scrollview.py +358 -0
- kivy/tests/test_uix_settings.py +33 -0
- kivy/tests/test_uix_slider.py +156 -0
- kivy/tests/test_uix_stacklayout.py +120 -0
- kivy/tests/test_uix_textinput.py +577 -0
- kivy/tests/test_uix_translate_coordinates.py +72 -0
- kivy/tests/test_uix_videoplayer.py +112 -0
- kivy/tests/test_uix_widget.py +137 -0
- kivy/tests/test_urlrequest/test_urlrequest_requests.py +378 -0
- kivy/tests/test_urlrequest/test_urlrequest_urllib.py +155 -0
- kivy/tests/test_utils.py +237 -0
- kivy/tests/test_vector.py +256 -0
- kivy/tests/test_video.py +25 -0
- kivy/tests/test_weakmethod.py +44 -0
- kivy/tests/test_widget.py +127 -0
- kivy/tests/test_widget_walk.py +70 -0
- kivy/tests/test_window_base.py +60 -0
- kivy/tests/test_window_info.py +29 -0
- kivy/tests/visual_test_label.py +291 -0
- kivy/tools/__init__.py +44 -0
- kivy/tools/benchmark.py +286 -0
- kivy/tools/changelog_parser.py +120 -0
- kivy/tools/coverage.py +135 -0
- kivy/tools/gallery.py +323 -0
- kivy/tools/generate-icons.py +117 -0
- kivy/tools/gles_compat/subset_gles.py +125 -0
- kivy/tools/highlight/__init__.py +9 -0
- kivy/tools/kviewer.py +80 -0
- kivy/tools/packaging/__init__.py +12 -0
- kivy/tools/packaging/cython_cfg.py +82 -0
- kivy/tools/packaging/factory.py +105 -0
- kivy/tools/packaging/pyinstaller_hooks/__init__.py +381 -0
- kivy/tools/packaging/pyinstaller_hooks/__main__.py +29 -0
- kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py +9 -0
- kivy/tools/packaging/pyinstaller_hooks/pyi_rth_kivy.py +17 -0
- kivy/tools/pep8checker/pep8.py +2316 -0
- kivy/tools/pep8checker/pep8kivy.py +109 -0
- kivy/tools/report.py +223 -0
- kivy/tools/stub-gl-debug.py +201 -0
- kivy/tools/texturecompress.py +233 -0
- kivy/uix/__init__.py +56 -0
- kivy/uix/accordion.py +484 -0
- kivy/uix/actionbar.py +934 -0
- kivy/uix/anchorlayout.py +122 -0
- kivy/uix/behaviors/__init__.py +95 -0
- kivy/uix/behaviors/button.py +212 -0
- kivy/uix/behaviors/codenavigation.py +167 -0
- kivy/uix/behaviors/compoundselection.py +688 -0
- kivy/uix/behaviors/cover.py +160 -0
- kivy/uix/behaviors/drag.py +234 -0
- kivy/uix/behaviors/emacs.py +140 -0
- kivy/uix/behaviors/focus.py +595 -0
- kivy/uix/behaviors/knspace.py +590 -0
- kivy/uix/behaviors/togglebutton.py +156 -0
- kivy/uix/behaviors/touchripple.py +318 -0
- kivy/uix/boxlayout.py +331 -0
- kivy/uix/bubble.py +576 -0
- kivy/uix/button.py +137 -0
- kivy/uix/camera.py +118 -0
- kivy/uix/carousel.py +695 -0
- kivy/uix/checkbox.py +197 -0
- kivy/uix/codeinput.py +238 -0
- kivy/uix/colorpicker.py +486 -0
- kivy/uix/dropdown.py +391 -0
- kivy/uix/effectwidget.py +772 -0
- kivy/uix/filechooser.py +1134 -0
- kivy/uix/floatlayout.py +148 -0
- kivy/uix/gesturesurface.py +625 -0
- kivy/uix/gridlayout.py +629 -0
- kivy/uix/image.py +528 -0
- kivy/uix/label.py +1200 -0
- kivy/uix/layout.py +322 -0
- kivy/uix/modalview.py +339 -0
- kivy/uix/pagelayout.py +233 -0
- kivy/uix/popup.py +266 -0
- kivy/uix/progressbar.py +95 -0
- kivy/uix/recycleboxlayout.py +183 -0
- kivy/uix/recyclegridlayout.py +255 -0
- kivy/uix/recyclelayout.py +446 -0
- kivy/uix/recycleview/__init__.py +624 -0
- kivy/uix/recycleview/datamodel.py +194 -0
- kivy/uix/recycleview/layout.py +253 -0
- kivy/uix/recycleview/views.py +423 -0
- kivy/uix/relativelayout.py +324 -0
- kivy/uix/rst.py +1492 -0
- kivy/uix/sandbox.py +198 -0
- kivy/uix/scatter.py +645 -0
- kivy/uix/scatterlayout.py +93 -0
- kivy/uix/screenmanager.py +1275 -0
- kivy/uix/scrollview.py +1288 -0
- kivy/uix/settings.py +1343 -0
- kivy/uix/slider.py +421 -0
- kivy/uix/spinner.py +221 -0
- kivy/uix/splitter.py +430 -0
- kivy/uix/stacklayout.py +331 -0
- kivy/uix/stencilview.py +40 -0
- kivy/uix/switch.py +122 -0
- kivy/uix/tabbedpanel.py +880 -0
- kivy/uix/textinput.py +4049 -0
- kivy/uix/togglebutton.py +37 -0
- kivy/uix/treeview.py +665 -0
- kivy/uix/video.py +302 -0
- kivy/uix/videoplayer.py +697 -0
- kivy/uix/vkeyboard.py +879 -0
- kivy/uix/widget.py +1629 -0
- kivy/utils.py +550 -0
- kivy/vector.py +412 -0
- kivy/weakmethod.py +72 -0
kivy/uix/image.py
ADDED
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Image
|
|
3
|
+
=====
|
|
4
|
+
|
|
5
|
+
The :class:`Image` widget is used to display an image::
|
|
6
|
+
|
|
7
|
+
Example in python::
|
|
8
|
+
|
|
9
|
+
wimg = Image(source='mylogo.png')
|
|
10
|
+
|
|
11
|
+
Kv Example::
|
|
12
|
+
|
|
13
|
+
Image:
|
|
14
|
+
source: 'mylogo.png'
|
|
15
|
+
size: self.texture_size
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Asynchronous Loading
|
|
19
|
+
--------------------
|
|
20
|
+
|
|
21
|
+
To load an image asynchronously (for example from an external webserver), use
|
|
22
|
+
the :class:`AsyncImage` subclass::
|
|
23
|
+
|
|
24
|
+
aimg = AsyncImage(source='http://mywebsite.com/logo.png')
|
|
25
|
+
|
|
26
|
+
This can be useful as it prevents your application from waiting until the image
|
|
27
|
+
is loaded. If you want to display large images or retrieve them from URL's,
|
|
28
|
+
using :class:`AsyncImage` will allow these resources to be retrieved on a
|
|
29
|
+
background thread without blocking your application.
|
|
30
|
+
|
|
31
|
+
Alignment
|
|
32
|
+
---------
|
|
33
|
+
|
|
34
|
+
By default, the image is centered inside the widget bounding box.
|
|
35
|
+
|
|
36
|
+
Adjustment
|
|
37
|
+
----------
|
|
38
|
+
|
|
39
|
+
To control how the image should be adjusted to fit inside the widget box, you
|
|
40
|
+
should use the :attr:`~kivy.uix.image.Image.fit_mode` property. Available
|
|
41
|
+
options include:
|
|
42
|
+
|
|
43
|
+
- ``"scale-down"``: maintains aspect ratio without stretching.
|
|
44
|
+
- ``"fill"``: stretches to fill widget, may cause distortion.
|
|
45
|
+
- ``"contain"``: maintains aspect ratio and resizes to fit inside widget.
|
|
46
|
+
- ``"cover"``: maintains aspect ratio and stretches to fill widget, may clip
|
|
47
|
+
image.
|
|
48
|
+
|
|
49
|
+
For more details, refer to the :attr:`~kivy.uix.image.Image.fit_mode`.
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
You can also inherit from Image and create your own style. For example, if you
|
|
53
|
+
want your image to be greater than the size of your widget, you could do::
|
|
54
|
+
|
|
55
|
+
class FullImage(Image):
|
|
56
|
+
pass
|
|
57
|
+
|
|
58
|
+
And in your kivy language file::
|
|
59
|
+
|
|
60
|
+
<-FullImage>:
|
|
61
|
+
canvas:
|
|
62
|
+
Color:
|
|
63
|
+
rgb: (1, 1, 1)
|
|
64
|
+
Rectangle:
|
|
65
|
+
texture: self.texture
|
|
66
|
+
size: self.width + 20, self.height + 20
|
|
67
|
+
pos: self.x - 10, self.y - 10
|
|
68
|
+
|
|
69
|
+
'''
|
|
70
|
+
__all__ = ('Image', 'AsyncImage')
|
|
71
|
+
|
|
72
|
+
from kivy.uix.widget import Widget
|
|
73
|
+
from kivy.core.image import Image as CoreImage
|
|
74
|
+
from kivy.resources import resource_find
|
|
75
|
+
from kivy.properties import (
|
|
76
|
+
StringProperty,
|
|
77
|
+
ObjectProperty,
|
|
78
|
+
ListProperty,
|
|
79
|
+
AliasProperty,
|
|
80
|
+
BooleanProperty,
|
|
81
|
+
NumericProperty,
|
|
82
|
+
ColorProperty,
|
|
83
|
+
OptionProperty
|
|
84
|
+
)
|
|
85
|
+
from kivy.logger import Logger
|
|
86
|
+
|
|
87
|
+
# delayed imports
|
|
88
|
+
Loader = None
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class Image(Widget):
|
|
92
|
+
'''Image class, see module documentation for more information.'''
|
|
93
|
+
|
|
94
|
+
source = StringProperty(None)
|
|
95
|
+
'''Filename / source of your image.
|
|
96
|
+
|
|
97
|
+
:attr:`source` is a :class:`~kivy.properties.StringProperty` and
|
|
98
|
+
defaults to None.
|
|
99
|
+
'''
|
|
100
|
+
|
|
101
|
+
texture = ObjectProperty(None, allownone=True)
|
|
102
|
+
'''Texture object of the image. The texture represents the original, loaded
|
|
103
|
+
image texture. It is stretched and positioned during rendering according to
|
|
104
|
+
the :attr:`fit_mode` property.
|
|
105
|
+
|
|
106
|
+
Depending of the texture creation, the value will be a
|
|
107
|
+
:class:`~kivy.graphics.texture.Texture` or a
|
|
108
|
+
:class:`~kivy.graphics.texture.TextureRegion` object.
|
|
109
|
+
|
|
110
|
+
:attr:`texture` is an :class:`~kivy.properties.ObjectProperty` and defaults
|
|
111
|
+
to None.
|
|
112
|
+
'''
|
|
113
|
+
|
|
114
|
+
texture_size = ListProperty([0, 0])
|
|
115
|
+
'''Texture size of the image. This represents the original, loaded image
|
|
116
|
+
texture size.
|
|
117
|
+
|
|
118
|
+
.. warning::
|
|
119
|
+
|
|
120
|
+
The texture size is set after the texture property. So if you listen to
|
|
121
|
+
the change on :attr:`texture`, the property texture_size will not be
|
|
122
|
+
up-to-date. Use self.texture.size instead.
|
|
123
|
+
'''
|
|
124
|
+
|
|
125
|
+
def get_image_ratio(self):
|
|
126
|
+
if self.texture:
|
|
127
|
+
return self.texture.width / float(self.texture.height)
|
|
128
|
+
return 1.0
|
|
129
|
+
|
|
130
|
+
mipmap = BooleanProperty(False)
|
|
131
|
+
'''Indicate if you want OpenGL mipmapping to be applied to the texture.
|
|
132
|
+
Read :ref:`mipmap` for more information.
|
|
133
|
+
|
|
134
|
+
.. versionadded:: 1.0.7
|
|
135
|
+
|
|
136
|
+
:attr:`mipmap` is a :class:`~kivy.properties.BooleanProperty` and defaults
|
|
137
|
+
to False.
|
|
138
|
+
'''
|
|
139
|
+
|
|
140
|
+
image_ratio = AliasProperty(get_image_ratio, bind=('texture',), cache=True)
|
|
141
|
+
'''Ratio of the image (width / float(height).
|
|
142
|
+
|
|
143
|
+
:attr:`image_ratio` is an :class:`~kivy.properties.AliasProperty` and is
|
|
144
|
+
read-only.
|
|
145
|
+
'''
|
|
146
|
+
|
|
147
|
+
color = ColorProperty([1, 1, 1, 1])
|
|
148
|
+
'''Image color, in the format (r, g, b, a). This attribute can be used to
|
|
149
|
+
'tint' an image. Be careful: if the source image is not gray/white, the
|
|
150
|
+
color will not really work as expected.
|
|
151
|
+
|
|
152
|
+
.. versionadded:: 1.0.6
|
|
153
|
+
|
|
154
|
+
:attr:`color` is a :class:`~kivy.properties.ColorProperty` and defaults to
|
|
155
|
+
[1, 1, 1, 1].
|
|
156
|
+
|
|
157
|
+
.. versionchanged:: 2.0.0
|
|
158
|
+
Changed from :class:`~kivy.properties.ListProperty` to
|
|
159
|
+
:class:`~kivy.properties.ColorProperty`.
|
|
160
|
+
'''
|
|
161
|
+
|
|
162
|
+
allow_stretch = BooleanProperty(False, deprecated=True)
|
|
163
|
+
'''If True, the normalized image size will be maximized to fit in the image
|
|
164
|
+
box. Otherwise, if the box is too tall, the image will not be
|
|
165
|
+
stretched more than 1:1 pixels.
|
|
166
|
+
|
|
167
|
+
.. versionadded:: 1.0.7
|
|
168
|
+
|
|
169
|
+
.. deprecated:: 2.2.0
|
|
170
|
+
:attr:`allow_stretch` have been deprecated. Please use `fit_mode`
|
|
171
|
+
instead.
|
|
172
|
+
|
|
173
|
+
:attr:`allow_stretch` is a :class:`~kivy.properties.BooleanProperty` and
|
|
174
|
+
defaults to False.
|
|
175
|
+
'''
|
|
176
|
+
|
|
177
|
+
keep_ratio = BooleanProperty(True, deprecated=True)
|
|
178
|
+
'''If False along with allow_stretch being True, the normalized image
|
|
179
|
+
size will be maximized to fit in the image box and ignores the aspect
|
|
180
|
+
ratio of the image.
|
|
181
|
+
Otherwise, if the box is too tall, the image will not be stretched more
|
|
182
|
+
than 1:1 pixels.
|
|
183
|
+
|
|
184
|
+
.. versionadded:: 1.0.8
|
|
185
|
+
|
|
186
|
+
.. deprecated:: 2.2.0
|
|
187
|
+
:attr:`keep_ratio` have been deprecated. Please use `fit_mode`
|
|
188
|
+
instead.
|
|
189
|
+
|
|
190
|
+
:attr:`keep_ratio` is a :class:`~kivy.properties.BooleanProperty` and
|
|
191
|
+
defaults to True.
|
|
192
|
+
'''
|
|
193
|
+
|
|
194
|
+
fit_mode = OptionProperty(
|
|
195
|
+
"scale-down", options=["scale-down", "fill", "contain", "cover"]
|
|
196
|
+
)
|
|
197
|
+
'''If the size of the image is different than the size of the widget,
|
|
198
|
+
determine how the image should be resized to fit inside the widget box.
|
|
199
|
+
|
|
200
|
+
Available options:
|
|
201
|
+
|
|
202
|
+
- ``"scale-down"``: the image will be scaled down to fit inside the widget
|
|
203
|
+
box, **maintaining its aspect ratio and without stretching**. If the size
|
|
204
|
+
of the image is smaller than the widget, it will be displayed at its
|
|
205
|
+
original size. If the image has a different aspect ratio than the widget,
|
|
206
|
+
there will be blank areas on the widget box.
|
|
207
|
+
|
|
208
|
+
- ``"fill"``: the image is stretched to fill the widget, **regardless of
|
|
209
|
+
its aspect ratio or dimensions**. If the image has a different aspect ratio
|
|
210
|
+
than the widget, this option can lead to distortion of the image.
|
|
211
|
+
|
|
212
|
+
- ``"contain"``: the image is resized to fit inside the widget box,
|
|
213
|
+
**maintaining its aspect ratio**. If the image size is larger than the
|
|
214
|
+
widget size, the behavior will be similar to ``"scale-down"``. However, if
|
|
215
|
+
the size of the image is smaller than the widget size, unlike
|
|
216
|
+
``"scale-down``, the image will be resized to fit inside the widget.
|
|
217
|
+
If the image has a different aspect ratio than the widget, there will be
|
|
218
|
+
blank areas on the widget box.
|
|
219
|
+
|
|
220
|
+
- ``"cover"``: the image will be stretched horizontally or vertically to
|
|
221
|
+
fill the widget box, **maintaining its aspect ratio**. If the image has a
|
|
222
|
+
different aspect ratio than the widget, then the image will be clipped to
|
|
223
|
+
fit.
|
|
224
|
+
|
|
225
|
+
:attr:`fit_mode` is a :class:`~kivy.properties.OptionProperty` and
|
|
226
|
+
defaults to ``"scale-down"``.
|
|
227
|
+
'''
|
|
228
|
+
|
|
229
|
+
keep_data = BooleanProperty(False)
|
|
230
|
+
'''If True, the underlying _coreimage will store the raw image data.
|
|
231
|
+
This is useful when performing pixel based collision detection.
|
|
232
|
+
|
|
233
|
+
.. versionadded:: 1.3.0
|
|
234
|
+
|
|
235
|
+
:attr:`keep_data` is a :class:`~kivy.properties.BooleanProperty` and
|
|
236
|
+
defaults to False.
|
|
237
|
+
'''
|
|
238
|
+
|
|
239
|
+
anim_delay = NumericProperty(0.25)
|
|
240
|
+
'''Delay the animation if the image is sequenced (like an animated gif).
|
|
241
|
+
If anim_delay is set to -1, the animation will be stopped.
|
|
242
|
+
|
|
243
|
+
.. versionadded:: 1.0.8
|
|
244
|
+
|
|
245
|
+
:attr:`anim_delay` is a :class:`~kivy.properties.NumericProperty` and
|
|
246
|
+
defaults to 0.25 (4 FPS).
|
|
247
|
+
'''
|
|
248
|
+
|
|
249
|
+
anim_loop = NumericProperty(0)
|
|
250
|
+
'''Number of loops to play then stop animating. 0 means keep animating.
|
|
251
|
+
|
|
252
|
+
.. versionadded:: 1.9.0
|
|
253
|
+
|
|
254
|
+
:attr:`anim_loop` is a :class:`~kivy.properties.NumericProperty` and
|
|
255
|
+
defaults to 0.
|
|
256
|
+
'''
|
|
257
|
+
|
|
258
|
+
nocache = BooleanProperty(False)
|
|
259
|
+
'''If this property is set True, the image will not be added to the
|
|
260
|
+
internal cache. The cache will simply ignore any calls trying to
|
|
261
|
+
append the core image.
|
|
262
|
+
|
|
263
|
+
.. versionadded:: 1.6.0
|
|
264
|
+
|
|
265
|
+
:attr:`nocache` is a :class:`~kivy.properties.BooleanProperty` and defaults
|
|
266
|
+
to False.
|
|
267
|
+
'''
|
|
268
|
+
|
|
269
|
+
def get_norm_image_size(self):
|
|
270
|
+
if not self.texture:
|
|
271
|
+
return list(self.size)
|
|
272
|
+
|
|
273
|
+
ratio = self.image_ratio
|
|
274
|
+
w, h = self.size
|
|
275
|
+
tw, th = self.texture.size
|
|
276
|
+
|
|
277
|
+
if self.fit_mode == "cover":
|
|
278
|
+
widget_ratio = w / max(1, h)
|
|
279
|
+
if widget_ratio > ratio:
|
|
280
|
+
return [w, (w * th) / tw]
|
|
281
|
+
else:
|
|
282
|
+
return [(h * tw) / th, h]
|
|
283
|
+
elif self.fit_mode == "fill":
|
|
284
|
+
return [w, h]
|
|
285
|
+
elif self.fit_mode == "contain":
|
|
286
|
+
iw = w
|
|
287
|
+
else:
|
|
288
|
+
iw = min(w, tw)
|
|
289
|
+
|
|
290
|
+
# calculate the appropriate height
|
|
291
|
+
ih = iw / ratio
|
|
292
|
+
# if the height is too higher, take the height of the container
|
|
293
|
+
# and calculate appropriate width. no need to test further. :)
|
|
294
|
+
if ih > h:
|
|
295
|
+
if self.fit_mode == "contain":
|
|
296
|
+
ih = h
|
|
297
|
+
else:
|
|
298
|
+
ih = min(h, th)
|
|
299
|
+
iw = ih * ratio
|
|
300
|
+
return [iw, ih]
|
|
301
|
+
|
|
302
|
+
norm_image_size = AliasProperty(
|
|
303
|
+
get_norm_image_size,
|
|
304
|
+
bind=(
|
|
305
|
+
'texture',
|
|
306
|
+
'size',
|
|
307
|
+
'image_ratio',
|
|
308
|
+
'fit_mode',
|
|
309
|
+
),
|
|
310
|
+
cache=True,
|
|
311
|
+
)
|
|
312
|
+
'''Normalized image size within the widget box.
|
|
313
|
+
|
|
314
|
+
This size will always fit the widget size and will preserve the image
|
|
315
|
+
ratio.
|
|
316
|
+
|
|
317
|
+
:attr:`norm_image_size` is an :class:`~kivy.properties.AliasProperty` and
|
|
318
|
+
is read-only.
|
|
319
|
+
'''
|
|
320
|
+
|
|
321
|
+
def __init__(self, **kwargs):
|
|
322
|
+
self._coreimage = None
|
|
323
|
+
self._loops = 0
|
|
324
|
+
update = self.texture_update
|
|
325
|
+
fbind = self.fbind
|
|
326
|
+
fbind('source', update)
|
|
327
|
+
fbind('mipmap', update)
|
|
328
|
+
|
|
329
|
+
# NOTE: Compatibility code due to deprecated properties.
|
|
330
|
+
fbind('keep_ratio', self._update_fit_mode)
|
|
331
|
+
fbind('allow_stretch', self._update_fit_mode)
|
|
332
|
+
super().__init__(**kwargs)
|
|
333
|
+
|
|
334
|
+
def _update_fit_mode(self, *args):
|
|
335
|
+
keep_ratio = self.keep_ratio
|
|
336
|
+
allow_stretch = self.allow_stretch
|
|
337
|
+
if (
|
|
338
|
+
not keep_ratio and not allow_stretch
|
|
339
|
+
or keep_ratio and not allow_stretch
|
|
340
|
+
):
|
|
341
|
+
self.fit_mode = "scale-down"
|
|
342
|
+
elif not keep_ratio and allow_stretch:
|
|
343
|
+
self.fit_mode = "fill"
|
|
344
|
+
elif keep_ratio and allow_stretch:
|
|
345
|
+
self.fit_mode = "contain"
|
|
346
|
+
|
|
347
|
+
def texture_update(self, *largs):
|
|
348
|
+
self.set_texture_from_resource(self.source)
|
|
349
|
+
|
|
350
|
+
def set_texture_from_resource(self, resource):
|
|
351
|
+
if not resource:
|
|
352
|
+
self._clear_core_image()
|
|
353
|
+
return
|
|
354
|
+
source = resource_find(resource)
|
|
355
|
+
if not source:
|
|
356
|
+
Logger.error('Image: Not found <%s>' % resource)
|
|
357
|
+
self._clear_core_image()
|
|
358
|
+
return
|
|
359
|
+
if self._coreimage:
|
|
360
|
+
self._coreimage.unbind(on_texture=self._on_tex_change)
|
|
361
|
+
try:
|
|
362
|
+
self._coreimage = image = CoreImage(
|
|
363
|
+
source,
|
|
364
|
+
mipmap=self.mipmap,
|
|
365
|
+
anim_delay=self.anim_delay,
|
|
366
|
+
keep_data=self.keep_data,
|
|
367
|
+
nocache=self.nocache
|
|
368
|
+
)
|
|
369
|
+
except Exception:
|
|
370
|
+
Logger.error('Image: Error loading <%s>' % resource)
|
|
371
|
+
self._clear_core_image()
|
|
372
|
+
image = self._coreimage
|
|
373
|
+
if image:
|
|
374
|
+
image.bind(on_texture=self._on_tex_change)
|
|
375
|
+
self.texture = image.texture
|
|
376
|
+
|
|
377
|
+
def on_anim_delay(self, instance, value):
|
|
378
|
+
if self._coreimage is None:
|
|
379
|
+
return
|
|
380
|
+
self._coreimage.anim_delay = value
|
|
381
|
+
if value < 0:
|
|
382
|
+
self._coreimage.anim_reset(False)
|
|
383
|
+
|
|
384
|
+
def on_texture(self, instance, value):
|
|
385
|
+
self.texture_size = value.size if value else [0, 0]
|
|
386
|
+
|
|
387
|
+
def _clear_core_image(self):
|
|
388
|
+
if self._coreimage:
|
|
389
|
+
self._coreimage.unbind(on_texture=self._on_tex_change)
|
|
390
|
+
self.texture = None
|
|
391
|
+
self._coreimage = None
|
|
392
|
+
self._loops = 0
|
|
393
|
+
|
|
394
|
+
def _on_tex_change(self, *largs):
|
|
395
|
+
# update texture from core image
|
|
396
|
+
self.texture = self._coreimage.texture
|
|
397
|
+
ci = self._coreimage
|
|
398
|
+
if self.anim_loop and ci._anim_index == len(ci._image.textures) - 1:
|
|
399
|
+
self._loops += 1
|
|
400
|
+
if self.anim_loop == self._loops:
|
|
401
|
+
ci.anim_reset(False)
|
|
402
|
+
self._loops = 0
|
|
403
|
+
|
|
404
|
+
def reload(self):
|
|
405
|
+
'''Reload image from disk. This facilitates re-loading of
|
|
406
|
+
images from disk in case the image content changes.
|
|
407
|
+
|
|
408
|
+
.. versionadded:: 1.3.0
|
|
409
|
+
|
|
410
|
+
Usage::
|
|
411
|
+
|
|
412
|
+
im = Image(source = '1.jpg')
|
|
413
|
+
# -- do something --
|
|
414
|
+
im.reload()
|
|
415
|
+
# image will be re-loaded from disk
|
|
416
|
+
|
|
417
|
+
'''
|
|
418
|
+
self.remove_from_cache()
|
|
419
|
+
old_source = self.source
|
|
420
|
+
self.source = ''
|
|
421
|
+
self.source = old_source
|
|
422
|
+
|
|
423
|
+
def remove_from_cache(self):
|
|
424
|
+
'''Remove image from cache.
|
|
425
|
+
|
|
426
|
+
.. versionadded:: 2.0.0
|
|
427
|
+
'''
|
|
428
|
+
if self._coreimage:
|
|
429
|
+
self._coreimage.remove_from_cache()
|
|
430
|
+
|
|
431
|
+
def on_nocache(self, *args):
|
|
432
|
+
if self.nocache:
|
|
433
|
+
self.remove_from_cache()
|
|
434
|
+
if self._coreimage:
|
|
435
|
+
self._coreimage._nocache = True
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
class AsyncImage(Image):
|
|
439
|
+
'''Asynchronous Image class. See the module documentation for more
|
|
440
|
+
information.
|
|
441
|
+
|
|
442
|
+
.. note::
|
|
443
|
+
|
|
444
|
+
The AsyncImage is a specialized form of the Image class. You may
|
|
445
|
+
want to refer to the :mod:`~kivy.loader` documentation and in
|
|
446
|
+
particular, the :class:`~kivy.loader.ProxyImage` for more detail
|
|
447
|
+
on how to handle events around asynchronous image loading.
|
|
448
|
+
|
|
449
|
+
.. note::
|
|
450
|
+
|
|
451
|
+
AsyncImage currently does not support properties
|
|
452
|
+
:attr:`anim_loop` and :attr:`mipmap` and setting those properties will
|
|
453
|
+
have no effect.
|
|
454
|
+
'''
|
|
455
|
+
|
|
456
|
+
__events__ = ('on_error', 'on_load')
|
|
457
|
+
|
|
458
|
+
def __init__(self, **kwargs):
|
|
459
|
+
self._found_source = None
|
|
460
|
+
self._coreimage = None
|
|
461
|
+
global Loader
|
|
462
|
+
if not Loader:
|
|
463
|
+
from kivy.loader import Loader
|
|
464
|
+
self.fbind('source', self._load_source)
|
|
465
|
+
super().__init__(**kwargs)
|
|
466
|
+
|
|
467
|
+
def _load_source(self, *args):
|
|
468
|
+
source = self.source
|
|
469
|
+
if not source:
|
|
470
|
+
self._clear_core_image()
|
|
471
|
+
return
|
|
472
|
+
if not self.is_uri(source):
|
|
473
|
+
source = resource_find(source)
|
|
474
|
+
if not source:
|
|
475
|
+
Logger.error('AsyncImage: Not found <%s>' % self.source)
|
|
476
|
+
self._clear_core_image()
|
|
477
|
+
return
|
|
478
|
+
self._found_source = source
|
|
479
|
+
self._coreimage = image = Loader.image(
|
|
480
|
+
source,
|
|
481
|
+
nocache=self.nocache,
|
|
482
|
+
mipmap=self.mipmap,
|
|
483
|
+
anim_delay=self.anim_delay
|
|
484
|
+
)
|
|
485
|
+
image.bind(
|
|
486
|
+
on_load=self._on_source_load,
|
|
487
|
+
on_error=self._on_source_error,
|
|
488
|
+
on_texture=self._on_tex_change
|
|
489
|
+
)
|
|
490
|
+
self.texture = image.texture
|
|
491
|
+
|
|
492
|
+
def _on_source_load(self, value):
|
|
493
|
+
image = self._coreimage.image
|
|
494
|
+
if not image:
|
|
495
|
+
return
|
|
496
|
+
self.texture = image.texture
|
|
497
|
+
self.dispatch('on_load')
|
|
498
|
+
|
|
499
|
+
def _on_source_error(self, instance, error=None):
|
|
500
|
+
self.dispatch('on_error', error)
|
|
501
|
+
|
|
502
|
+
def on_error(self, error):
|
|
503
|
+
pass
|
|
504
|
+
|
|
505
|
+
def on_load(self, *args):
|
|
506
|
+
pass
|
|
507
|
+
|
|
508
|
+
def is_uri(self, filename):
|
|
509
|
+
proto = filename.split('://', 1)[0]
|
|
510
|
+
return proto in ('http', 'https', 'ftp', 'smb')
|
|
511
|
+
|
|
512
|
+
def _clear_core_image(self):
|
|
513
|
+
if self._coreimage:
|
|
514
|
+
self._coreimage.unbind(on_load=self._on_source_load)
|
|
515
|
+
super()._clear_core_image()
|
|
516
|
+
self._found_source = None
|
|
517
|
+
|
|
518
|
+
def _on_tex_change(self, *largs):
|
|
519
|
+
if self._coreimage:
|
|
520
|
+
self.texture = self._coreimage.texture
|
|
521
|
+
|
|
522
|
+
def texture_update(self, *largs):
|
|
523
|
+
pass
|
|
524
|
+
|
|
525
|
+
def remove_from_cache(self):
|
|
526
|
+
if self._found_source:
|
|
527
|
+
Loader.remove_from_cache(self._found_source)
|
|
528
|
+
super().remove_from_cache()
|