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/layout.py
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Layout
|
|
3
|
+
======
|
|
4
|
+
|
|
5
|
+
Layouts are used to calculate and assign widget positions.
|
|
6
|
+
|
|
7
|
+
The :class:`Layout` class itself cannot be used directly.
|
|
8
|
+
You should use one of the following layout classes:
|
|
9
|
+
|
|
10
|
+
- Anchor layout: :class:`kivy.uix.anchorlayout.AnchorLayout`
|
|
11
|
+
- Box layout: :class:`kivy.uix.boxlayout.BoxLayout`
|
|
12
|
+
- Float layout: :class:`kivy.uix.floatlayout.FloatLayout`
|
|
13
|
+
- Grid layout: :class:`kivy.uix.gridlayout.GridLayout`
|
|
14
|
+
- Page Layout: :class:`kivy.uix.pagelayout.PageLayout`
|
|
15
|
+
- Relative layout: :class:`kivy.uix.relativelayout.RelativeLayout`
|
|
16
|
+
- Scatter layout: :class:`kivy.uix.scatterlayout.ScatterLayout`
|
|
17
|
+
- Stack layout: :class:`kivy.uix.stacklayout.StackLayout`
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
Understanding the `size_hint` Property in `Widget`
|
|
21
|
+
--------------------------------------------------
|
|
22
|
+
|
|
23
|
+
The :attr:`~kivy.uix.Widget.size_hint` is a tuple of values used by
|
|
24
|
+
layouts to manage the sizes of their children. It indicates the size
|
|
25
|
+
relative to the layout's size instead of an absolute size (in
|
|
26
|
+
pixels/points/cm/etc). The format is::
|
|
27
|
+
|
|
28
|
+
widget.size_hint = (width_proportion, height_proportion)
|
|
29
|
+
|
|
30
|
+
The proportions are specified as floating point numbers in the range 0-1. For
|
|
31
|
+
example, 0.5 represents 50%, 1 represents 100%.
|
|
32
|
+
|
|
33
|
+
If you want a widget's width to be half of the parent's width and the
|
|
34
|
+
height to be identical to the parent's height, you would do::
|
|
35
|
+
|
|
36
|
+
widget.size_hint = (0.5, 1.0)
|
|
37
|
+
|
|
38
|
+
If you don't want to use a size_hint for either the width or height, set the
|
|
39
|
+
value to None. For example, to make a widget that is 250px wide and 30%
|
|
40
|
+
of the parent's height, do::
|
|
41
|
+
|
|
42
|
+
widget.size_hint = (None, 0.3)
|
|
43
|
+
widget.width = 250
|
|
44
|
+
|
|
45
|
+
Being :class:`Kivy properties <kivy.properties>`, these can also be set via
|
|
46
|
+
constructor arguments::
|
|
47
|
+
|
|
48
|
+
widget = Widget(size_hint=(None, 0.3), width=250)
|
|
49
|
+
|
|
50
|
+
.. versionchanged:: 1.4.1
|
|
51
|
+
The `reposition_child` internal method (made public by mistake) has
|
|
52
|
+
been removed.
|
|
53
|
+
|
|
54
|
+
'''
|
|
55
|
+
|
|
56
|
+
__all__ = ('Layout', )
|
|
57
|
+
|
|
58
|
+
from kivy.clock import Clock
|
|
59
|
+
from kivy.uix.widget import Widget
|
|
60
|
+
from kivy.compat import isclose
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class Layout(Widget):
|
|
64
|
+
'''Layout interface class, used to implement every layout. See module
|
|
65
|
+
documentation for more information.
|
|
66
|
+
'''
|
|
67
|
+
|
|
68
|
+
_trigger_layout = None
|
|
69
|
+
|
|
70
|
+
def __init__(self, **kwargs):
|
|
71
|
+
if self.__class__ == Layout:
|
|
72
|
+
raise Exception('The Layout class is abstract and \
|
|
73
|
+
cannot be used directly.')
|
|
74
|
+
if self._trigger_layout is None:
|
|
75
|
+
self._trigger_layout = Clock.create_trigger(self.do_layout, -1)
|
|
76
|
+
super(Layout, self).__init__(**kwargs)
|
|
77
|
+
|
|
78
|
+
def do_layout(self, *largs):
|
|
79
|
+
'''This function is called when a layout is called by a trigger.
|
|
80
|
+
If you are writing a new Layout subclass, don't call this function
|
|
81
|
+
directly but use :meth:`_trigger_layout` instead.
|
|
82
|
+
|
|
83
|
+
The function is by default called *before* the next frame, therefore
|
|
84
|
+
the layout isn't updated immediately. Anything depending on the
|
|
85
|
+
positions of e.g. children should be scheduled for the next frame.
|
|
86
|
+
|
|
87
|
+
.. versionadded:: 1.0.8
|
|
88
|
+
'''
|
|
89
|
+
raise NotImplementedError('Must be implemented in subclasses.')
|
|
90
|
+
|
|
91
|
+
def add_widget(self, widget, *args, **kwargs):
|
|
92
|
+
fbind = widget.fbind
|
|
93
|
+
fbind('size', self._trigger_layout)
|
|
94
|
+
fbind('size_hint', self._trigger_layout)
|
|
95
|
+
fbind('size_hint_max', self._trigger_layout)
|
|
96
|
+
fbind('size_hint_min', self._trigger_layout)
|
|
97
|
+
super(Layout, self).add_widget(widget, *args, **kwargs)
|
|
98
|
+
|
|
99
|
+
def remove_widget(self, widget, *args, **kwargs):
|
|
100
|
+
funbind = widget.funbind
|
|
101
|
+
funbind('size', self._trigger_layout)
|
|
102
|
+
funbind('size_hint', self._trigger_layout)
|
|
103
|
+
funbind('size_hint_max', self._trigger_layout)
|
|
104
|
+
funbind('size_hint_min', self._trigger_layout)
|
|
105
|
+
super(Layout, self).remove_widget(widget, *args, **kwargs)
|
|
106
|
+
|
|
107
|
+
def layout_hint_with_bounds(
|
|
108
|
+
self, sh_sum, available_space, min_bounded_size, sh_min_vals,
|
|
109
|
+
sh_max_vals, hint):
|
|
110
|
+
'''(internal) Computes the appropriate (size) hint for all the
|
|
111
|
+
widgets given (potential) min or max bounds on the widgets' size.
|
|
112
|
+
The ``hint`` list is updated with appropriate sizes.
|
|
113
|
+
|
|
114
|
+
It walks through the hints and for any widgets whose hint will result
|
|
115
|
+
in violating min or max constraints, it fixes the hint. Any remaining
|
|
116
|
+
or missing space after all the widgets are fixed get distributed
|
|
117
|
+
to the widgets making them smaller or larger according to their
|
|
118
|
+
size hint.
|
|
119
|
+
|
|
120
|
+
This algorithms knows nothing about the widgets other than what is
|
|
121
|
+
passed through the input params, so it's fairly generic for laying
|
|
122
|
+
things out according to constraints using size hints.
|
|
123
|
+
|
|
124
|
+
:Parameters:
|
|
125
|
+
|
|
126
|
+
`sh_sum`: float
|
|
127
|
+
The sum of the size hints (basically ``sum(size_hint)``).
|
|
128
|
+
`available_space`: float
|
|
129
|
+
The amount of pixels available for all the widgets
|
|
130
|
+
whose size hint is not None. Cannot be zero.
|
|
131
|
+
`min_bounded_size`: float
|
|
132
|
+
The minimum amount of space required according to the
|
|
133
|
+
`size_hint_min` of the widgets (basically
|
|
134
|
+
``sum(size_hint_min)``).
|
|
135
|
+
`sh_min_vals`: list or iterable
|
|
136
|
+
Items in the iterable are the size_hint_min for each widget.
|
|
137
|
+
Can be None. The length should be the same as ``hint``
|
|
138
|
+
`sh_max_vals`: list or iterable
|
|
139
|
+
Items in the iterable are the size_hint_max for each widget.
|
|
140
|
+
Can be None. The length should be the same as ``hint``
|
|
141
|
+
`hint`: list
|
|
142
|
+
A list whose size is the same as the length of ``sh_min_vals``
|
|
143
|
+
and ``sh_min_vals`` whose each element is the corresponding
|
|
144
|
+
size hint value of that element. This list is updated in place
|
|
145
|
+
with correct size hints that ensure the constraints are not
|
|
146
|
+
violated.
|
|
147
|
+
|
|
148
|
+
:returns:
|
|
149
|
+
Nothing. ``hint`` is updated in place.
|
|
150
|
+
'''
|
|
151
|
+
if not sh_sum:
|
|
152
|
+
return
|
|
153
|
+
# TODO: test when children have size_hint, max/min of zero
|
|
154
|
+
|
|
155
|
+
# all divs are float denominator ;)
|
|
156
|
+
stretch_ratio = sh_sum / float(available_space)
|
|
157
|
+
if available_space <= min_bounded_size or \
|
|
158
|
+
isclose(available_space, min_bounded_size):
|
|
159
|
+
# too small, just set to min
|
|
160
|
+
for i, (sh, sh_min) in enumerate(zip(hint, sh_min_vals)):
|
|
161
|
+
if sh is None:
|
|
162
|
+
continue
|
|
163
|
+
|
|
164
|
+
if sh_min is not None:
|
|
165
|
+
hint[i] = sh_min * stretch_ratio # set to min size
|
|
166
|
+
else:
|
|
167
|
+
hint[i] = 0. # everything else is zero
|
|
168
|
+
return
|
|
169
|
+
|
|
170
|
+
# these dicts take i (widget child) as key
|
|
171
|
+
not_mined_contrib = {} # all who's sh > min_sh or had no min_sh
|
|
172
|
+
not_maxed_contrib = {} # all who's sh < max_sh or had no max_sh
|
|
173
|
+
sh_mins_avail = {} # the sh amt removable until we hit sh_min
|
|
174
|
+
sh_maxs_avail = {} # the sh amt addable until we hit sh_max
|
|
175
|
+
oversize_amt = undersize_amt = 0
|
|
176
|
+
hint_orig = hint[:]
|
|
177
|
+
|
|
178
|
+
# first, for all the items, set them to be within their max/min
|
|
179
|
+
# size_hint bound, also find how much their size_hint can be reduced
|
|
180
|
+
# or increased
|
|
181
|
+
for i, (sh, sh_min, sh_max) in enumerate(
|
|
182
|
+
zip(hint, sh_min_vals, sh_max_vals)):
|
|
183
|
+
if sh is None:
|
|
184
|
+
continue
|
|
185
|
+
|
|
186
|
+
diff = 0
|
|
187
|
+
|
|
188
|
+
if sh_min is not None:
|
|
189
|
+
sh_min *= stretch_ratio
|
|
190
|
+
diff = sh_min - sh # how much we are under the min
|
|
191
|
+
|
|
192
|
+
if diff > 0:
|
|
193
|
+
hint[i] = sh_min
|
|
194
|
+
undersize_amt += diff
|
|
195
|
+
else:
|
|
196
|
+
not_mined_contrib[i] = None
|
|
197
|
+
|
|
198
|
+
sh_mins_avail[i] = hint[i] - sh_min
|
|
199
|
+
else:
|
|
200
|
+
not_mined_contrib[i] = None
|
|
201
|
+
sh_mins_avail[i] = hint[i]
|
|
202
|
+
|
|
203
|
+
if sh_max is not None:
|
|
204
|
+
sh_max *= stretch_ratio
|
|
205
|
+
diff = sh - sh_max
|
|
206
|
+
|
|
207
|
+
if diff > 0:
|
|
208
|
+
hint[i] = sh_max # how much we are over the max
|
|
209
|
+
oversize_amt += diff
|
|
210
|
+
else:
|
|
211
|
+
not_maxed_contrib[i] = None
|
|
212
|
+
|
|
213
|
+
sh_maxs_avail[i] = sh_max - hint[i]
|
|
214
|
+
else:
|
|
215
|
+
not_maxed_contrib[i] = None
|
|
216
|
+
sh_maxs_avail[i] = sh_sum - hint[i]
|
|
217
|
+
|
|
218
|
+
if i in not_mined_contrib:
|
|
219
|
+
not_mined_contrib[i] = max(0., diff) # how much got removed
|
|
220
|
+
if i in not_maxed_contrib:
|
|
221
|
+
not_maxed_contrib[i] = max(0., diff) # how much got added
|
|
222
|
+
|
|
223
|
+
# if margin is zero, the amount of the widgets that were made smaller
|
|
224
|
+
# magically equals the amount of the widgets that were made larger
|
|
225
|
+
# so we're all good
|
|
226
|
+
margin = oversize_amt - undersize_amt
|
|
227
|
+
if isclose(oversize_amt, undersize_amt, abs_tol=1e-15):
|
|
228
|
+
return
|
|
229
|
+
|
|
230
|
+
# we need to redistribute the margin among all widgets
|
|
231
|
+
# if margin is positive, then we have extra space because the widgets
|
|
232
|
+
# that were larger and were reduced contributed more, so increase
|
|
233
|
+
# the size hint for those that are allowed to be larger by the
|
|
234
|
+
# most allowed, proportionately to their size (or inverse size hint).
|
|
235
|
+
# similarly for the opposite case
|
|
236
|
+
if margin > 1e-15:
|
|
237
|
+
contrib_amt = not_maxed_contrib
|
|
238
|
+
sh_available = sh_maxs_avail
|
|
239
|
+
mult = 1.
|
|
240
|
+
contrib_proportion = hint_orig
|
|
241
|
+
elif margin < -1e-15:
|
|
242
|
+
margin *= -1.
|
|
243
|
+
contrib_amt = not_mined_contrib
|
|
244
|
+
sh_available = sh_mins_avail
|
|
245
|
+
mult = -1.
|
|
246
|
+
|
|
247
|
+
# when reducing the size of widgets proportionately, those with
|
|
248
|
+
# larger sh get reduced less, and those with smaller, more.
|
|
249
|
+
mn = min((h for h in hint_orig if h))
|
|
250
|
+
mx = max((h for h in hint_orig if h is not None))
|
|
251
|
+
hint_top = (2. * mn if mn else 1.) if mn == mx else mn + mx
|
|
252
|
+
contrib_proportion = [None if h is None else hint_top - h for
|
|
253
|
+
h in hint_orig]
|
|
254
|
+
|
|
255
|
+
# contrib_amt is all the widgets that are not their max/min and
|
|
256
|
+
# can afford to be made bigger/smaller
|
|
257
|
+
# We only use the contrib_amt indices from now on
|
|
258
|
+
contrib_prop_sum = float(
|
|
259
|
+
sum((contrib_proportion[i] for i in contrib_amt)))
|
|
260
|
+
|
|
261
|
+
if contrib_prop_sum < 1e-9:
|
|
262
|
+
assert mult == 1. # should only happen when all sh are zero
|
|
263
|
+
return
|
|
264
|
+
|
|
265
|
+
contrib_height = {
|
|
266
|
+
i: val / (contrib_proportion[i] / contrib_prop_sum) for
|
|
267
|
+
i, val in contrib_amt.items()}
|
|
268
|
+
items = sorted(
|
|
269
|
+
(i for i in contrib_amt),
|
|
270
|
+
key=lambda x: contrib_height[x])
|
|
271
|
+
|
|
272
|
+
j = items[0]
|
|
273
|
+
sum_i_contributed = contrib_amt[j]
|
|
274
|
+
last_height = contrib_height[j]
|
|
275
|
+
sh_available_i = {j: sh_available[j]}
|
|
276
|
+
contrib_prop_sum_i = contrib_proportion[j]
|
|
277
|
+
|
|
278
|
+
n = len(items) # check when n <= 1
|
|
279
|
+
i = 1
|
|
280
|
+
if 1 < n:
|
|
281
|
+
j = items[1]
|
|
282
|
+
curr_height = contrib_height[j]
|
|
283
|
+
|
|
284
|
+
done = False
|
|
285
|
+
while not done and i < n:
|
|
286
|
+
while i < n and last_height == curr_height:
|
|
287
|
+
j = items[i]
|
|
288
|
+
sum_i_contributed += contrib_amt[j]
|
|
289
|
+
contrib_prop_sum_i += contrib_proportion[j]
|
|
290
|
+
sh_available_i[j] = sh_available[j]
|
|
291
|
+
curr_height = contrib_height[j]
|
|
292
|
+
i += 1
|
|
293
|
+
last_height = curr_height
|
|
294
|
+
|
|
295
|
+
while not done:
|
|
296
|
+
margin_height = ((margin + sum_i_contributed) /
|
|
297
|
+
(contrib_prop_sum_i / contrib_prop_sum))
|
|
298
|
+
if margin_height - curr_height > 1e-9 and i < n:
|
|
299
|
+
break
|
|
300
|
+
|
|
301
|
+
done = True
|
|
302
|
+
for k, available_sh in list(sh_available_i.items()):
|
|
303
|
+
if margin_height - available_sh / (
|
|
304
|
+
contrib_proportion[k] / contrib_prop_sum) > 1e-9:
|
|
305
|
+
del sh_available_i[k]
|
|
306
|
+
sum_i_contributed -= contrib_amt[k]
|
|
307
|
+
contrib_prop_sum_i -= contrib_proportion[k]
|
|
308
|
+
margin -= available_sh
|
|
309
|
+
hint[k] += mult * available_sh
|
|
310
|
+
done = False
|
|
311
|
+
|
|
312
|
+
if not sh_available_i: # all were under the margin
|
|
313
|
+
break
|
|
314
|
+
|
|
315
|
+
if sh_available_i:
|
|
316
|
+
assert contrib_prop_sum_i and margin
|
|
317
|
+
margin_height = ((margin + sum_i_contributed) /
|
|
318
|
+
(contrib_prop_sum_i / contrib_prop_sum))
|
|
319
|
+
for i in sh_available_i:
|
|
320
|
+
hint[i] += mult * (
|
|
321
|
+
margin_height * contrib_proportion[i] / contrib_prop_sum -
|
|
322
|
+
contrib_amt[i])
|
kivy/uix/modalview.py
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ModalView
|
|
3
|
+
=========
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.4.0
|
|
6
|
+
|
|
7
|
+
The :class:`ModalView` widget is used to create modal views. By default, the
|
|
8
|
+
view will cover the whole "main" window.
|
|
9
|
+
|
|
10
|
+
Remember that the default size of a Widget is size_hint=(1, 1). If you don't
|
|
11
|
+
want your view to be fullscreen, either use size hints with values lower than
|
|
12
|
+
1 (for instance size_hint=(.8, .8)) or deactivate the size_hint and use fixed
|
|
13
|
+
size attributes.
|
|
14
|
+
|
|
15
|
+
Examples
|
|
16
|
+
--------
|
|
17
|
+
|
|
18
|
+
Example of a simple 400x400 Hello world view::
|
|
19
|
+
|
|
20
|
+
view = ModalView(size_hint=(None, None), size=(400, 400))
|
|
21
|
+
view.add_widget(Label(text='Hello world'))
|
|
22
|
+
|
|
23
|
+
By default, any click outside the view will dismiss it. If you don't
|
|
24
|
+
want that, you can set :attr:`ModalView.auto_dismiss` to False::
|
|
25
|
+
|
|
26
|
+
view = ModalView(auto_dismiss=False)
|
|
27
|
+
view.add_widget(Label(text='Hello world'))
|
|
28
|
+
view.open()
|
|
29
|
+
|
|
30
|
+
To manually dismiss/close the view, use the :meth:`ModalView.dismiss` method of
|
|
31
|
+
the ModalView instance::
|
|
32
|
+
|
|
33
|
+
view.dismiss()
|
|
34
|
+
|
|
35
|
+
Both :meth:`ModalView.open` and :meth:`ModalView.dismiss` are bind-able. That
|
|
36
|
+
means you can directly bind the function to an action, e.g. to a button's
|
|
37
|
+
on_press ::
|
|
38
|
+
|
|
39
|
+
# create content and add it to the view
|
|
40
|
+
content = Button(text='Close me!')
|
|
41
|
+
view = ModalView(auto_dismiss=False)
|
|
42
|
+
view.add_widget(content)
|
|
43
|
+
|
|
44
|
+
# bind the on_press event of the button to the dismiss function
|
|
45
|
+
content.bind(on_press=view.dismiss)
|
|
46
|
+
|
|
47
|
+
# open the view
|
|
48
|
+
view.open()
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
ModalView Events
|
|
52
|
+
----------------
|
|
53
|
+
|
|
54
|
+
There are four events available: `on_pre_open` and `on_open` which are raised
|
|
55
|
+
when the view is opening; `on_pre_dismiss` and `on_dismiss` which are raised
|
|
56
|
+
when the view is closed.
|
|
57
|
+
|
|
58
|
+
For `on_dismiss`, you can prevent the view from closing by explicitly
|
|
59
|
+
returning `True` from your callback::
|
|
60
|
+
|
|
61
|
+
def my_callback(instance):
|
|
62
|
+
print('ModalView', instance, 'is being dismissed, but is prevented!')
|
|
63
|
+
return True
|
|
64
|
+
view = ModalView()
|
|
65
|
+
view.add_widget(Label(text='Hello world'))
|
|
66
|
+
view.bind(on_dismiss=my_callback)
|
|
67
|
+
view.open()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
.. versionchanged:: 1.5.0
|
|
71
|
+
The ModalView can be closed by hitting the escape key on the
|
|
72
|
+
keyboard if the :attr:`ModalView.auto_dismiss` property is True (the
|
|
73
|
+
default).
|
|
74
|
+
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
__all__ = ('ModalView', )
|
|
78
|
+
|
|
79
|
+
from kivy.animation import Animation
|
|
80
|
+
from kivy.properties import (
|
|
81
|
+
StringProperty, BooleanProperty, ObjectProperty, NumericProperty,
|
|
82
|
+
ListProperty, ColorProperty)
|
|
83
|
+
from kivy.uix.anchorlayout import AnchorLayout
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class ModalView(AnchorLayout):
|
|
87
|
+
"""ModalView class. See module documentation for more information.
|
|
88
|
+
|
|
89
|
+
:Events:
|
|
90
|
+
`on_pre_open`:
|
|
91
|
+
Fired before the ModalView is opened. When this event is fired
|
|
92
|
+
ModalView is not yet added to window.
|
|
93
|
+
`on_open`:
|
|
94
|
+
Fired when the ModalView is opened.
|
|
95
|
+
`on_pre_dismiss`:
|
|
96
|
+
Fired before the ModalView is closed.
|
|
97
|
+
`on_dismiss`:
|
|
98
|
+
Fired when the ModalView is closed. If the callback returns True,
|
|
99
|
+
the dismiss will be canceled.
|
|
100
|
+
|
|
101
|
+
.. versionchanged:: 1.11.0
|
|
102
|
+
Added events `on_pre_open` and `on_pre_dismiss`.
|
|
103
|
+
|
|
104
|
+
.. versionchanged:: 2.0.0
|
|
105
|
+
Added property 'overlay_color'.
|
|
106
|
+
|
|
107
|
+
.. versionchanged:: 2.1.0
|
|
108
|
+
Marked `attach_to` property as deprecated.
|
|
109
|
+
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
# noinspection PyArgumentEqualDefault
|
|
113
|
+
auto_dismiss = BooleanProperty(True)
|
|
114
|
+
'''This property determines if the view is automatically
|
|
115
|
+
dismissed when the user clicks outside it.
|
|
116
|
+
|
|
117
|
+
:attr:`auto_dismiss` is a :class:`~kivy.properties.BooleanProperty` and
|
|
118
|
+
defaults to True.
|
|
119
|
+
'''
|
|
120
|
+
|
|
121
|
+
attach_to = ObjectProperty(None, deprecated=True)
|
|
122
|
+
'''If a widget is set on attach_to, the view will attach to the nearest
|
|
123
|
+
parent window of the widget. If none is found, it will attach to the
|
|
124
|
+
main/global Window.
|
|
125
|
+
|
|
126
|
+
:attr:`attach_to` is an :class:`~kivy.properties.ObjectProperty` and
|
|
127
|
+
defaults to None.
|
|
128
|
+
'''
|
|
129
|
+
|
|
130
|
+
background_color = ColorProperty([1, 1, 1, 1])
|
|
131
|
+
'''Background color, in the format (r, g, b, a).
|
|
132
|
+
|
|
133
|
+
This acts as a *multiplier* to the texture color. The default
|
|
134
|
+
texture is grey, so just setting the background color will give
|
|
135
|
+
a darker result. To set a plain color, set the
|
|
136
|
+
:attr:`background_normal` to ``''``.
|
|
137
|
+
|
|
138
|
+
The :attr:`background_color` is a
|
|
139
|
+
:class:`~kivy.properties.ColorProperty` and defaults to [1, 1, 1, 1].
|
|
140
|
+
|
|
141
|
+
.. versionchanged:: 2.0.0
|
|
142
|
+
Changed behavior to affect the background of the widget itself, not
|
|
143
|
+
the overlay dimming.
|
|
144
|
+
Changed from :class:`~kivy.properties.ListProperty` to
|
|
145
|
+
:class:`~kivy.properties.ColorProperty`.
|
|
146
|
+
'''
|
|
147
|
+
|
|
148
|
+
background = StringProperty(
|
|
149
|
+
'atlas://data/images/defaulttheme/modalview-background')
|
|
150
|
+
'''Background image of the view used for the view background.
|
|
151
|
+
|
|
152
|
+
:attr:`background` is a :class:`~kivy.properties.StringProperty` and
|
|
153
|
+
defaults to 'atlas://data/images/defaulttheme/modalview-background'.
|
|
154
|
+
'''
|
|
155
|
+
|
|
156
|
+
border = ListProperty([16, 16, 16, 16])
|
|
157
|
+
'''Border used for :class:`~kivy.graphics.vertex_instructions.BorderImage`
|
|
158
|
+
graphics instruction. Used for the :attr:`background_normal` and the
|
|
159
|
+
:attr:`background_down` properties. Can be used when using custom
|
|
160
|
+
backgrounds.
|
|
161
|
+
|
|
162
|
+
It must be a list of four values: (bottom, right, top, left). Read the
|
|
163
|
+
BorderImage instructions for more information about how to use it.
|
|
164
|
+
|
|
165
|
+
:attr:`border` is a :class:`~kivy.properties.ListProperty` and defaults to
|
|
166
|
+
(16, 16, 16, 16).
|
|
167
|
+
'''
|
|
168
|
+
|
|
169
|
+
overlay_color = ColorProperty([0, 0, 0, .7])
|
|
170
|
+
'''Overlay color in the format (r, g, b, a).
|
|
171
|
+
Used for dimming the window behind the modal view.
|
|
172
|
+
|
|
173
|
+
:attr:`overlay_color` is a :class:`~kivy.properties.ColorProperty` and
|
|
174
|
+
defaults to [0, 0, 0, .7].
|
|
175
|
+
|
|
176
|
+
.. versionadded:: 2.0.0
|
|
177
|
+
'''
|
|
178
|
+
|
|
179
|
+
# Internals properties used for graphical representation.
|
|
180
|
+
|
|
181
|
+
_anim_alpha = NumericProperty(0)
|
|
182
|
+
|
|
183
|
+
_anim_duration = NumericProperty(.1)
|
|
184
|
+
|
|
185
|
+
_window = ObjectProperty(allownone=True, rebind=True)
|
|
186
|
+
|
|
187
|
+
_is_open = BooleanProperty(False)
|
|
188
|
+
|
|
189
|
+
_touch_started_inside = None
|
|
190
|
+
|
|
191
|
+
__events__ = ('on_pre_open', 'on_open', 'on_pre_dismiss', 'on_dismiss')
|
|
192
|
+
|
|
193
|
+
def __init__(self, **kwargs):
|
|
194
|
+
self._parent = None
|
|
195
|
+
super(ModalView, self).__init__(**kwargs)
|
|
196
|
+
|
|
197
|
+
def open(self, *_args, **kwargs):
|
|
198
|
+
"""Display the modal in the Window.
|
|
199
|
+
|
|
200
|
+
When the view is opened, it will be faded in with an animation. If you
|
|
201
|
+
don't want the animation, use::
|
|
202
|
+
|
|
203
|
+
view.open(animation=False)
|
|
204
|
+
|
|
205
|
+
"""
|
|
206
|
+
from kivy.core.window import Window
|
|
207
|
+
if self._is_open:
|
|
208
|
+
return
|
|
209
|
+
self._window = Window
|
|
210
|
+
self._is_open = True
|
|
211
|
+
self.dispatch('on_pre_open')
|
|
212
|
+
Window.add_widget(self)
|
|
213
|
+
Window.bind(
|
|
214
|
+
on_resize=self._align_center,
|
|
215
|
+
on_keyboard=self._handle_keyboard)
|
|
216
|
+
self.center = Window.center
|
|
217
|
+
self.fbind('center', self._align_center)
|
|
218
|
+
self.fbind('size', self._align_center)
|
|
219
|
+
if kwargs.get('animation', True):
|
|
220
|
+
ani = Animation(_anim_alpha=1., d=self._anim_duration)
|
|
221
|
+
ani.bind(on_complete=lambda *_args: self.dispatch('on_open'))
|
|
222
|
+
ani.start(self)
|
|
223
|
+
else:
|
|
224
|
+
self._anim_alpha = 1.
|
|
225
|
+
self.dispatch('on_open')
|
|
226
|
+
|
|
227
|
+
def dismiss(self, *_args, **kwargs):
|
|
228
|
+
""" Close the view if it is open.
|
|
229
|
+
|
|
230
|
+
If you really want to close the view, whatever the on_dismiss
|
|
231
|
+
event returns, you can use the *force* keyword argument::
|
|
232
|
+
|
|
233
|
+
view = ModalView()
|
|
234
|
+
view.dismiss(force=True)
|
|
235
|
+
|
|
236
|
+
When the view is dismissed, it will be faded out before being
|
|
237
|
+
removed from the parent. If you don't want this animation, use::
|
|
238
|
+
|
|
239
|
+
view.dismiss(animation=False)
|
|
240
|
+
|
|
241
|
+
"""
|
|
242
|
+
if not self._is_open:
|
|
243
|
+
return
|
|
244
|
+
self.dispatch('on_pre_dismiss')
|
|
245
|
+
if self.dispatch('on_dismiss') is True:
|
|
246
|
+
if kwargs.get('force', False) is not True:
|
|
247
|
+
return
|
|
248
|
+
if kwargs.get('animation', True):
|
|
249
|
+
Animation(_anim_alpha=0., d=self._anim_duration).start(self)
|
|
250
|
+
else:
|
|
251
|
+
self._anim_alpha = 0
|
|
252
|
+
self._real_remove_widget()
|
|
253
|
+
|
|
254
|
+
def _align_center(self, *_args):
|
|
255
|
+
if self._is_open:
|
|
256
|
+
self.center = self._window.center
|
|
257
|
+
|
|
258
|
+
def on_motion(self, etype, me):
|
|
259
|
+
super().on_motion(etype, me)
|
|
260
|
+
return True
|
|
261
|
+
|
|
262
|
+
def on_touch_down(self, touch):
|
|
263
|
+
""" touch down event handler. """
|
|
264
|
+
self._touch_started_inside = self.collide_point(*touch.pos)
|
|
265
|
+
if not self.auto_dismiss or self._touch_started_inside:
|
|
266
|
+
super().on_touch_down(touch)
|
|
267
|
+
return True
|
|
268
|
+
|
|
269
|
+
def on_touch_move(self, touch):
|
|
270
|
+
""" touch moved event handler. """
|
|
271
|
+
if not self.auto_dismiss or self._touch_started_inside:
|
|
272
|
+
super().on_touch_move(touch)
|
|
273
|
+
return True
|
|
274
|
+
|
|
275
|
+
def on_touch_up(self, touch):
|
|
276
|
+
""" touch up event handler. """
|
|
277
|
+
# Explicitly test for False as None occurs when shown by on_touch_down
|
|
278
|
+
if self.auto_dismiss and self._touch_started_inside is False:
|
|
279
|
+
self.dismiss()
|
|
280
|
+
else:
|
|
281
|
+
super().on_touch_up(touch)
|
|
282
|
+
self._touch_started_inside = None
|
|
283
|
+
return True
|
|
284
|
+
|
|
285
|
+
def on__anim_alpha(self, _instance, value):
|
|
286
|
+
""" animation progress callback. """
|
|
287
|
+
if value == 0 and self._is_open:
|
|
288
|
+
self._real_remove_widget()
|
|
289
|
+
|
|
290
|
+
def _real_remove_widget(self):
|
|
291
|
+
if not self._is_open:
|
|
292
|
+
return
|
|
293
|
+
self._window.remove_widget(self)
|
|
294
|
+
self._window.unbind(
|
|
295
|
+
on_resize=self._align_center,
|
|
296
|
+
on_keyboard=self._handle_keyboard)
|
|
297
|
+
self._is_open = False
|
|
298
|
+
self._window = None
|
|
299
|
+
|
|
300
|
+
def on_pre_open(self):
|
|
301
|
+
""" default pre-open event handler. """
|
|
302
|
+
|
|
303
|
+
def on_open(self):
|
|
304
|
+
""" default open event handler. """
|
|
305
|
+
|
|
306
|
+
def on_pre_dismiss(self):
|
|
307
|
+
""" default pre-dismiss event handler. """
|
|
308
|
+
|
|
309
|
+
def on_dismiss(self):
|
|
310
|
+
""" default dismiss event handler. """
|
|
311
|
+
|
|
312
|
+
def _handle_keyboard(self, _window, key, *_args):
|
|
313
|
+
if key == 27 and self.auto_dismiss:
|
|
314
|
+
self.dismiss()
|
|
315
|
+
return True
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
if __name__ == '__main__':
|
|
319
|
+
from kivy.base import runTouchApp
|
|
320
|
+
from kivy.uix.button import Button
|
|
321
|
+
from kivy.core.window import Window
|
|
322
|
+
from kivy.uix.label import Label
|
|
323
|
+
from kivy.uix.gridlayout import GridLayout
|
|
324
|
+
|
|
325
|
+
# add view
|
|
326
|
+
content = GridLayout(cols=1)
|
|
327
|
+
content.add_widget(Label(text='This is a hello world'))
|
|
328
|
+
view = ModalView(size_hint=(None, None), size=(256, 256))
|
|
329
|
+
view.add_widget(content)
|
|
330
|
+
|
|
331
|
+
layout = GridLayout(cols=3)
|
|
332
|
+
for x in range(9):
|
|
333
|
+
btn = Button(text=f"click me {x}")
|
|
334
|
+
btn.bind(on_release=view.open)
|
|
335
|
+
layout.add_widget(btn)
|
|
336
|
+
Window.add_widget(layout)
|
|
337
|
+
|
|
338
|
+
view.open()
|
|
339
|
+
runTouchApp()
|