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/bubble.py
ADDED
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Bubble
|
|
3
|
+
======
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.1.0
|
|
6
|
+
|
|
7
|
+
.. image:: images/bubble.jpg
|
|
8
|
+
:align: right
|
|
9
|
+
|
|
10
|
+
The :class:`Bubble` widget is a form of menu or a small popup with an arrow
|
|
11
|
+
arranged on one side of it's content.
|
|
12
|
+
|
|
13
|
+
The :class:`Bubble` contains an arrow attached to the content
|
|
14
|
+
(e.g., :class:`BubbleContent`) pointing in the direction you choose. It can
|
|
15
|
+
be placed either at a predefined location or flexibly by specifying a relative
|
|
16
|
+
position on the border of the widget.
|
|
17
|
+
|
|
18
|
+
The :class:`BubbleContent` is a styled BoxLayout and is thought to be added to
|
|
19
|
+
the :class:`Bubble` as a child widget. The :class:`Bubble` will then arrange
|
|
20
|
+
an arrow around the content as desired. Instead of the class:`BubbleContent`,
|
|
21
|
+
you can theoretically use any other :class:`Widget` as well as long as it
|
|
22
|
+
supports the 'bind' and 'unbind' function of the :class:`EventDispatcher` and
|
|
23
|
+
is compatible with Kivy to be placed inside a :class:`BoxLayout`.
|
|
24
|
+
|
|
25
|
+
The :class:`BubbleButton`is a styled Button. It suits to the style of
|
|
26
|
+
:class:`Bubble` and :class:`BubbleContent`. Feel free to place other Widgets
|
|
27
|
+
inside the 'content' of the :class:`Bubble`.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
.. versionchanged:: 2.2.0
|
|
31
|
+
The properties :attr:`background_image`, :attr:`background_color`,
|
|
32
|
+
:attr:`border` and :attr:`border_auto_scale` were removed from :class:`Bubble`.
|
|
33
|
+
These properties had only been used by the content widget that now uses it's
|
|
34
|
+
own properties instead. The color of the arrow is now changed with
|
|
35
|
+
:attr:`arrow_color` instead of :attr:`background_color`.
|
|
36
|
+
These changes makes the :class:`Bubble` transparent to use with other layouts
|
|
37
|
+
as content without any side-effects due to property inheritance.
|
|
38
|
+
|
|
39
|
+
The property :attr:`flex_arrow_pos` has been added to allow further
|
|
40
|
+
customization of the arrow positioning.
|
|
41
|
+
|
|
42
|
+
The properties :attr:`arrow_margin`, :attr:`arrow_margin_x`,
|
|
43
|
+
:attr:`arrow_margin_y`, :attr:`content_size`, :attr:`content_width` and
|
|
44
|
+
:attr:`content_height` have been added to ease proper sizing of a
|
|
45
|
+
:class:`Bubble` e.g., based on it's content size.
|
|
46
|
+
|
|
47
|
+
BubbleContent
|
|
48
|
+
=============
|
|
49
|
+
|
|
50
|
+
The :class:`BubbleContent` is a styled BoxLayout that can be used to
|
|
51
|
+
add e.g., :class:`BubbleButtons` as menu items.
|
|
52
|
+
|
|
53
|
+
.. versionchanged:: 2.2.0
|
|
54
|
+
The properties :attr:`background_image`, :attr:`background_color`,
|
|
55
|
+
:attr:`border` and :attr:`border_auto_scale` were added to the
|
|
56
|
+
:class:`BubbleContent`. The :class:`BubbleContent` does no longer rely on these
|
|
57
|
+
properties being present in the parent class.
|
|
58
|
+
|
|
59
|
+
BubbleButton
|
|
60
|
+
============
|
|
61
|
+
|
|
62
|
+
The :class:`BubbleButton` is a styled :class:`Button` that can be used to be
|
|
63
|
+
added to the :class:`BubbleContent`.
|
|
64
|
+
|
|
65
|
+
Simple example
|
|
66
|
+
--------------
|
|
67
|
+
|
|
68
|
+
.. include:: ../../examples/widgets/bubble_test.py
|
|
69
|
+
:literal:
|
|
70
|
+
|
|
71
|
+
Customize the Bubble
|
|
72
|
+
--------------------
|
|
73
|
+
|
|
74
|
+
You can choose the direction in which the arrow points::
|
|
75
|
+
|
|
76
|
+
Bubble(arrow_pos='top_mid')
|
|
77
|
+
or
|
|
78
|
+
Bubble(size=(200, 40), flex_arrow_pos=(175, 40))
|
|
79
|
+
|
|
80
|
+
Similarly, the corresponding properties in the '.kv' language can be used
|
|
81
|
+
as well.
|
|
82
|
+
|
|
83
|
+
You can change the appearance of the bubble::
|
|
84
|
+
|
|
85
|
+
Bubble(
|
|
86
|
+
arrow_image='/path/to/arrow/image',
|
|
87
|
+
arrow_color=(1, 0, 0, .5)),
|
|
88
|
+
)
|
|
89
|
+
BubbleContent(
|
|
90
|
+
background_image='/path/to/background/image',
|
|
91
|
+
background_color=(1, 0, 0, .5), # 50% translucent red
|
|
92
|
+
border=(0,0,0,0),
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
Similarly, the corresponding properties in the '.kv' language can be used
|
|
96
|
+
as well.
|
|
97
|
+
|
|
98
|
+
-----------------------------
|
|
99
|
+
'''
|
|
100
|
+
|
|
101
|
+
__all__ = ('Bubble', 'BubbleButton', 'BubbleContent')
|
|
102
|
+
|
|
103
|
+
from kivy.uix.image import Image
|
|
104
|
+
from kivy.uix.scatter import Scatter
|
|
105
|
+
from kivy.uix.boxlayout import BoxLayout
|
|
106
|
+
from kivy.uix.relativelayout import RelativeLayout
|
|
107
|
+
from kivy.uix.button import Button
|
|
108
|
+
from kivy.properties import ObjectProperty
|
|
109
|
+
from kivy.properties import StringProperty
|
|
110
|
+
from kivy.properties import OptionProperty
|
|
111
|
+
from kivy.properties import ListProperty
|
|
112
|
+
from kivy.properties import BooleanProperty
|
|
113
|
+
from kivy.properties import ColorProperty
|
|
114
|
+
from kivy.properties import NumericProperty
|
|
115
|
+
from kivy.properties import ReferenceListProperty
|
|
116
|
+
from kivy.base import EventLoop
|
|
117
|
+
from kivy.metrics import dp
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class BubbleException(Exception):
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class BubbleButton(Button):
|
|
125
|
+
'''A button intended for use in a BubbleContent widget.
|
|
126
|
+
You can use a "normal" button class, but it will not look good unless the
|
|
127
|
+
background is changed.
|
|
128
|
+
|
|
129
|
+
Rather use this BubbleButton widget that is already defined and provides a
|
|
130
|
+
suitable background for you.
|
|
131
|
+
'''
|
|
132
|
+
pass
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class BubbleContent(BoxLayout):
|
|
136
|
+
'''A styled BoxLayout that can be used as the content widget of a Bubble.
|
|
137
|
+
|
|
138
|
+
.. versionchanged:: 2.2.0
|
|
139
|
+
The graphical appearance of :class:`BubbleContent` is now based on it's
|
|
140
|
+
own properties :attr:`background_image`, :attr:`background_color`,
|
|
141
|
+
:attr:`border` and :attr:`border_auto_scale`. The parent widget properties
|
|
142
|
+
are no longer considered. This makes the BubbleContent a standalone themed
|
|
143
|
+
BoxLayout.
|
|
144
|
+
'''
|
|
145
|
+
|
|
146
|
+
background_color = ColorProperty([1, 1, 1, 1])
|
|
147
|
+
'''Background color, in the format (r, g, b, a). To use it you have to set
|
|
148
|
+
:attr:`background_image` first.
|
|
149
|
+
|
|
150
|
+
.. versionadded:: 2.2.0
|
|
151
|
+
|
|
152
|
+
:attr:`background_color` is a :class:`~kivy.properties.ColorProperty` and
|
|
153
|
+
defaults to [1, 1, 1, 1].
|
|
154
|
+
'''
|
|
155
|
+
|
|
156
|
+
background_image = StringProperty('atlas://data/images/defaulttheme/bubble')
|
|
157
|
+
'''Background image of the bubble.
|
|
158
|
+
|
|
159
|
+
.. versionadded:: 2.2.0
|
|
160
|
+
|
|
161
|
+
:attr:`background_image` is a :class:`~kivy.properties.StringProperty` and
|
|
162
|
+
defaults to 'atlas://data/images/defaulttheme/bubble'.
|
|
163
|
+
'''
|
|
164
|
+
|
|
165
|
+
border = ListProperty([16, 16, 16, 16])
|
|
166
|
+
'''Border used for :class:`~kivy.graphics.vertex_instructions.BorderImage`
|
|
167
|
+
graphics instruction. Used with the :attr:`background_image`.
|
|
168
|
+
It should be used when using custom backgrounds.
|
|
169
|
+
|
|
170
|
+
It must be a list of 4 values: (bottom, right, top, left). Read the
|
|
171
|
+
BorderImage instructions for more information about how to use it.
|
|
172
|
+
|
|
173
|
+
.. versionadded:: 2.2.0
|
|
174
|
+
|
|
175
|
+
:attr:`border` is a :class:`~kivy.properties.ListProperty` and defaults to
|
|
176
|
+
(16, 16, 16, 16)
|
|
177
|
+
'''
|
|
178
|
+
|
|
179
|
+
border_auto_scale = OptionProperty(
|
|
180
|
+
'both_lower',
|
|
181
|
+
options=[
|
|
182
|
+
'off', 'both', 'x_only', 'y_only', 'y_full_x_lower',
|
|
183
|
+
'x_full_y_lower', 'both_lower'
|
|
184
|
+
]
|
|
185
|
+
)
|
|
186
|
+
'''Specifies the :attr:`kivy.graphics.BorderImage.auto_scale`
|
|
187
|
+
value on the background BorderImage.
|
|
188
|
+
|
|
189
|
+
.. versionadded:: 2.2.0
|
|
190
|
+
|
|
191
|
+
:attr:`border_auto_scale` is a
|
|
192
|
+
:class:`~kivy.properties.OptionProperty` and defaults to
|
|
193
|
+
'both_lower'.
|
|
194
|
+
'''
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class Bubble(BoxLayout):
|
|
198
|
+
'''Bubble class. See module documentation for more information.
|
|
199
|
+
'''
|
|
200
|
+
|
|
201
|
+
content = ObjectProperty(allownone=True)
|
|
202
|
+
'''This is the object where the main content of the bubble is held.
|
|
203
|
+
|
|
204
|
+
The content of the Bubble set by 'add_widget' and removed with
|
|
205
|
+
'remove_widget' similarly to the :class:`ActionView` which is placed into
|
|
206
|
+
a class:`ActionBar`
|
|
207
|
+
|
|
208
|
+
:attr:`content` is a :class:`~kivy.properties.ObjectProperty` and defaults
|
|
209
|
+
to None.
|
|
210
|
+
'''
|
|
211
|
+
|
|
212
|
+
arrow_image = StringProperty(
|
|
213
|
+
'atlas://data/images/defaulttheme/bubble_arrow'
|
|
214
|
+
)
|
|
215
|
+
''' Image of the arrow pointing to the bubble.
|
|
216
|
+
|
|
217
|
+
:attr:`arrow_image` is a :class:`~kivy.properties.StringProperty` and
|
|
218
|
+
defaults to 'atlas://data/images/defaulttheme/bubble_arrow'.
|
|
219
|
+
'''
|
|
220
|
+
|
|
221
|
+
arrow_color = ColorProperty([1, 1, 1, 1])
|
|
222
|
+
'''Arrow color, in the format (r, g, b, a). To use it you have to set
|
|
223
|
+
:attr:`arrow_image` first.
|
|
224
|
+
|
|
225
|
+
.. versionadded:: 2.2.0
|
|
226
|
+
|
|
227
|
+
:attr:`arrow_color` is a :class:`~kivy.properties.ColorProperty` and
|
|
228
|
+
defaults to [1, 1, 1, 1].
|
|
229
|
+
'''
|
|
230
|
+
|
|
231
|
+
show_arrow = BooleanProperty(True)
|
|
232
|
+
''' Indicates whether to show arrow.
|
|
233
|
+
|
|
234
|
+
.. versionadded:: 1.8.0
|
|
235
|
+
|
|
236
|
+
:attr:`show_arrow` is a :class:`~kivy.properties.BooleanProperty` and
|
|
237
|
+
defaults to `True`.
|
|
238
|
+
'''
|
|
239
|
+
|
|
240
|
+
arrow_pos = OptionProperty(
|
|
241
|
+
'bottom_mid',
|
|
242
|
+
options=(
|
|
243
|
+
'left_top', 'left_mid', 'left_bottom',
|
|
244
|
+
'top_left', 'top_mid', 'top_right',
|
|
245
|
+
'right_top', 'right_mid', 'right_bottom',
|
|
246
|
+
'bottom_left', 'bottom_mid', 'bottom_right',
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
'''Specifies the position of the arrow as predefined relative position to
|
|
250
|
+
the bubble.
|
|
251
|
+
Can be one of: left_top, left_mid, left_bottom top_left, top_mid, top_right
|
|
252
|
+
right_top, right_mid, right_bottom bottom_left, bottom_mid, bottom_right.
|
|
253
|
+
|
|
254
|
+
:attr:`arrow_pos` is a :class:`~kivy.properties.OptionProperty` and
|
|
255
|
+
defaults to 'bottom_mid'.
|
|
256
|
+
'''
|
|
257
|
+
|
|
258
|
+
flex_arrow_pos = ListProperty(None)
|
|
259
|
+
'''Specifies the position of the arrow as flex coordinate around the
|
|
260
|
+
border of the :class:`Bubble` Widget.
|
|
261
|
+
If this property is set to a proper position (relative pixel coordinates
|
|
262
|
+
within the :class:`Bubble` widget, it overwrites the setting
|
|
263
|
+
:attr:`arrow_pos`.
|
|
264
|
+
|
|
265
|
+
.. versionadded:: 2.2.0
|
|
266
|
+
|
|
267
|
+
:attr:`flex_arrow_pos` is a :class:`~kivy.properties.ListProperty` and
|
|
268
|
+
defaults to None.
|
|
269
|
+
'''
|
|
270
|
+
|
|
271
|
+
limit_to = ObjectProperty(None, allownone=True)
|
|
272
|
+
'''Specifies the widget to which the bubbles position is restricted.
|
|
273
|
+
|
|
274
|
+
.. versionadded:: 1.6.0
|
|
275
|
+
|
|
276
|
+
:attr:`limit_to` is a :class:`~kivy.properties.ObjectProperty` and defaults
|
|
277
|
+
to 'None'.
|
|
278
|
+
'''
|
|
279
|
+
|
|
280
|
+
arrow_margin_x = NumericProperty(0)
|
|
281
|
+
'''Automatically computed margin in x direction that the arrow widget
|
|
282
|
+
occupies in pixel.
|
|
283
|
+
|
|
284
|
+
In combination with the :attr:`content_width`, this property can be used
|
|
285
|
+
to determine the correct width of the Bubble to exactly enclose the
|
|
286
|
+
arrow + content by adding :attr:`content_width` and :attr:`arrow_margin_x`
|
|
287
|
+
|
|
288
|
+
.. versionadded:: 2.2.0
|
|
289
|
+
|
|
290
|
+
:attr:`arrow_margin_x` is a :class:`~kivy.properties.NumericProperty` and
|
|
291
|
+
represents the added margin in x direction due to the arrow widget.
|
|
292
|
+
It defaults to 0 and is read only.
|
|
293
|
+
'''
|
|
294
|
+
|
|
295
|
+
arrow_margin_y = NumericProperty(0)
|
|
296
|
+
'''Automatically computed margin in y direction that the arrow widget
|
|
297
|
+
occupies in pixel.
|
|
298
|
+
|
|
299
|
+
In combination with the :attr:`content_height`, this property can be used
|
|
300
|
+
to determine the correct height of the Bubble to exactly enclose the
|
|
301
|
+
arrow + content by adding :attr:`content_height` and :attr:`arrow_margin_y`
|
|
302
|
+
|
|
303
|
+
.. versionadded:: 2.2.0
|
|
304
|
+
|
|
305
|
+
:attr:`arrow_margin_y` is a :class:`~kivy.properties.NumericProperty` and
|
|
306
|
+
represents the added margin in y direction due to the arrow widget.
|
|
307
|
+
It defaults to 0 and is read only.
|
|
308
|
+
'''
|
|
309
|
+
|
|
310
|
+
arrow_margin = ReferenceListProperty(arrow_margin_x, arrow_margin_y)
|
|
311
|
+
'''Automatically computed margin that the arrow widget occupies in
|
|
312
|
+
x and y direction in pixel.
|
|
313
|
+
|
|
314
|
+
Check the description of :attr:`arrow_margin_x` and :attr:`arrow_margin_y`.
|
|
315
|
+
|
|
316
|
+
.. versionadded:: 2.2.0
|
|
317
|
+
|
|
318
|
+
:attr:`arrow_margin` is a :class:`~kivy.properties.ReferenceListProperty`
|
|
319
|
+
of (:attr:`arrow_margin_x`, :attr:`arrow_margin_y`) properties.
|
|
320
|
+
It is read only.
|
|
321
|
+
'''
|
|
322
|
+
|
|
323
|
+
content_width = NumericProperty(0)
|
|
324
|
+
'''The width of the content Widget.
|
|
325
|
+
|
|
326
|
+
.. versionadded:: 2.2.0
|
|
327
|
+
|
|
328
|
+
:attr:`content_width` is a :class:`~kivy.properties.NumericProperty` and
|
|
329
|
+
is the same as self.content.width if content is not None, else it defaults
|
|
330
|
+
to 0. It is read only.
|
|
331
|
+
'''
|
|
332
|
+
|
|
333
|
+
content_height = NumericProperty(0)
|
|
334
|
+
'''The height of the content Widget.
|
|
335
|
+
|
|
336
|
+
.. versionadded:: 2.2.0
|
|
337
|
+
|
|
338
|
+
:attr:`content_height` is a :class:`~kivy.properties.NumericProperty` and
|
|
339
|
+
is the same as self.content.height if content is not None, else it defaults
|
|
340
|
+
to 0. It is read only.
|
|
341
|
+
'''
|
|
342
|
+
|
|
343
|
+
content_size = ReferenceListProperty(content_width, content_height)
|
|
344
|
+
''' The size of the content Widget.
|
|
345
|
+
|
|
346
|
+
.. versionadded:: 2.2.0
|
|
347
|
+
|
|
348
|
+
:attr:`content_size` is a :class:`~kivy.properties.ReferenceListProperty`
|
|
349
|
+
of (:attr:`content_width`, :attr:`content_height`) properties.
|
|
350
|
+
It is read only.
|
|
351
|
+
'''
|
|
352
|
+
|
|
353
|
+
# Internal map that specifies the different parameters for fixed arrow
|
|
354
|
+
# position layouts. The flex_arrow_pos uses these parameter sets
|
|
355
|
+
# as a template.
|
|
356
|
+
# 0: orientation of the children of Bubble ([content, arrow])
|
|
357
|
+
# 1: order of widgets to add to the BoxLayout (default: [content, arrow])
|
|
358
|
+
# 2: size_hint of _arrow_image_layout
|
|
359
|
+
# 3: rotation of the _arrow_image
|
|
360
|
+
# 4: pos_hint of the _arrow_image_layout
|
|
361
|
+
ARROW_LAYOUTS = {
|
|
362
|
+
"bottom_left": ( "vertical", 1, ( 1, None), 0, { "top": 1.0, "x": 0.05}), # noqa: E201,E241,E501
|
|
363
|
+
"bottom_mid": ( "vertical", 1, ( 1, None), 0, { "top": 1.0, "center_x": 0.50}), # noqa: E201,E241,E501
|
|
364
|
+
"bottom_right": ( "vertical", 1, ( 1, None), 0, { "top": 1.0, "right": 0.95}), # noqa: E201,E241,E501
|
|
365
|
+
"right_bottom": ( "horizontal", 1, (None, 1), 90, { "left": 0.0, "y": 0.05}), # noqa: E201,E241,E501
|
|
366
|
+
"right_mid": ( "horizontal", 1, (None, 1), 90, { "left": 0.0, "center_y": 0.50}), # noqa: E201,E241,E501
|
|
367
|
+
"right_top": ( "horizontal", 1, (None, 1), 90, { "left": 0.0, "top": 0.95}), # noqa: E201,E241,E501
|
|
368
|
+
"top_left": ( "vertical", -1, ( 1, None), 180, {"bottom": 0.0, "x": 0.05}), # noqa: E201,E241,E501
|
|
369
|
+
"top_mid": ( "vertical", -1, ( 1, None), 180, {"bottom": 0.0, "center_x": 0.50}), # noqa: E201,E241,E501
|
|
370
|
+
"top_right": ( "vertical", -1, ( 1, None), 180, {"bottom": 0.0, "right": 0.95}), # noqa: E201,E241,E501
|
|
371
|
+
"left_bottom": ( "horizontal", -1, (None, 1), -90, {"right": 1.0, "y": 0.05}), # noqa: E201,E241,E501
|
|
372
|
+
"left_mid": ( "horizontal", -1, (None, 1), -90, {"right": 1.0, "center_y": 0.50}), # noqa: E201,E241,E501
|
|
373
|
+
"left_top": ( "horizontal", -1, (None, 1), -90, {"right": 1.0, "top": 0.95}), # noqa: E201,E241,E501
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
def __init__(self, **kwargs):
|
|
377
|
+
self.content = None
|
|
378
|
+
|
|
379
|
+
self._flex_arrow_layout_params = None
|
|
380
|
+
self._temporarily_ignore_limits = False
|
|
381
|
+
|
|
382
|
+
self._arrow_image = Image(
|
|
383
|
+
source=self.arrow_image,
|
|
384
|
+
fit_mode="scale-down",
|
|
385
|
+
color=self.arrow_color
|
|
386
|
+
)
|
|
387
|
+
self._arrow_image.width = self._arrow_image.texture_size[0]
|
|
388
|
+
self._arrow_image.height = dp(self._arrow_image.texture_size[1])
|
|
389
|
+
self._arrow_image_scatter = Scatter(
|
|
390
|
+
size_hint=(None, None),
|
|
391
|
+
do_scale=False,
|
|
392
|
+
do_rotation=False,
|
|
393
|
+
do_translation=False,
|
|
394
|
+
)
|
|
395
|
+
self._arrow_image_scatter.add_widget(self._arrow_image)
|
|
396
|
+
self._arrow_image_scatter.size = self._arrow_image.texture_size
|
|
397
|
+
self._arrow_image_scatter_wrapper = BoxLayout(
|
|
398
|
+
size_hint=(None, None),
|
|
399
|
+
)
|
|
400
|
+
self._arrow_image_scatter_wrapper.add_widget(self._arrow_image_scatter)
|
|
401
|
+
self._arrow_image_layout = RelativeLayout()
|
|
402
|
+
self._arrow_image_layout.add_widget(self._arrow_image_scatter_wrapper)
|
|
403
|
+
|
|
404
|
+
self._arrow_layout = None
|
|
405
|
+
|
|
406
|
+
super().__init__(**kwargs)
|
|
407
|
+
self.reposition_inner_widgets()
|
|
408
|
+
|
|
409
|
+
def add_widget(self, widget, *args, **kwargs):
|
|
410
|
+
if self.content is None:
|
|
411
|
+
self.content = widget
|
|
412
|
+
self.content_size = widget.size
|
|
413
|
+
self.content.bind(size=self.update_content_size)
|
|
414
|
+
self.reposition_inner_widgets()
|
|
415
|
+
else:
|
|
416
|
+
raise BubbleException(
|
|
417
|
+
"Bubble can only contain a single Widget or Layout"
|
|
418
|
+
)
|
|
419
|
+
|
|
420
|
+
def remove_widget(self, widget, *args, **kwargs):
|
|
421
|
+
if widget == self.content:
|
|
422
|
+
self.content.unbind(size=self.update_content_size)
|
|
423
|
+
self.content = None
|
|
424
|
+
self.content_size = [0, 0]
|
|
425
|
+
self.reposition_inner_widgets()
|
|
426
|
+
return
|
|
427
|
+
super().remove_widget(widget, *args, **kwargs)
|
|
428
|
+
|
|
429
|
+
def on_content_size(self, instance, value):
|
|
430
|
+
self.adjust_position()
|
|
431
|
+
|
|
432
|
+
def on_limit_to(self, instance, value):
|
|
433
|
+
self.adjust_position()
|
|
434
|
+
|
|
435
|
+
def on_pos(self, instance, value):
|
|
436
|
+
self.adjust_position()
|
|
437
|
+
|
|
438
|
+
def on_size(self, instance, value):
|
|
439
|
+
self.reposition_inner_widgets()
|
|
440
|
+
|
|
441
|
+
def on_arrow_image(self, instance, value):
|
|
442
|
+
self._arrow_image.source = self.arrow_image
|
|
443
|
+
self._arrow_image.width = self._arrow_image.texture_size[0]
|
|
444
|
+
self._arrow_image.height = dp(self._arrow_image.texture_size[1])
|
|
445
|
+
self._arrow_image_scatter.size = self._arrow_image.texture_size
|
|
446
|
+
self.reposition_inner_widgets()
|
|
447
|
+
|
|
448
|
+
def on_arrow_color(self, instance, value):
|
|
449
|
+
self._arrow_image.color = self.arrow_color
|
|
450
|
+
|
|
451
|
+
def on_arrow_pos(self, instance, value):
|
|
452
|
+
self.reposition_inner_widgets()
|
|
453
|
+
|
|
454
|
+
def on_flex_arrow_pos(self, instance, value):
|
|
455
|
+
self._flex_arrow_layout_params = self.get_flex_arrow_layout_params()
|
|
456
|
+
self.reposition_inner_widgets()
|
|
457
|
+
|
|
458
|
+
def get_flex_arrow_layout_params(self):
|
|
459
|
+
pos = self.flex_arrow_pos
|
|
460
|
+
|
|
461
|
+
if pos is None:
|
|
462
|
+
return None
|
|
463
|
+
|
|
464
|
+
x, y = pos
|
|
465
|
+
if not (0 <= x <= self.width and 0 <= y <= self.height):
|
|
466
|
+
return None
|
|
467
|
+
|
|
468
|
+
# the order of the following list defines the side that the arrow
|
|
469
|
+
# will be attached to in case of ambiguity (same distances)
|
|
470
|
+
base_layouts_map = [
|
|
471
|
+
("bottom_mid", y),
|
|
472
|
+
("top_mid", self.height - y),
|
|
473
|
+
("left_mid", x),
|
|
474
|
+
("right_mid", self.width - x),
|
|
475
|
+
]
|
|
476
|
+
base_layout_key = min(base_layouts_map, key=lambda val: val[1])[0]
|
|
477
|
+
arrow_layout = list(Bubble.ARROW_LAYOUTS[base_layout_key])
|
|
478
|
+
|
|
479
|
+
arrow_width = self._arrow_image.width
|
|
480
|
+
|
|
481
|
+
# This function calculates the proper value for pos_hint, i.e., the
|
|
482
|
+
# arrow texture does not 'overflow' and stays entirely connected to
|
|
483
|
+
# the side of the content.
|
|
484
|
+
def calc_x0(x, length):
|
|
485
|
+
return x * (length - arrow_width) / (length * length)
|
|
486
|
+
|
|
487
|
+
if base_layout_key == "bottom_mid":
|
|
488
|
+
arrow_layout[-1] = {"top": 1.0, "x": calc_x0(x, self.width)}
|
|
489
|
+
elif base_layout_key == "top_mid":
|
|
490
|
+
arrow_layout[-1] = {"bottom": 0.0, "x": calc_x0(x, self.width)}
|
|
491
|
+
elif base_layout_key == "left_mid":
|
|
492
|
+
arrow_layout[-1] = {"right": 1.0, "y": calc_x0(y, self.height)}
|
|
493
|
+
elif base_layout_key == "right_mid":
|
|
494
|
+
arrow_layout[-1] = {"left": 0.0, "y": calc_x0(y, self.height)}
|
|
495
|
+
return arrow_layout
|
|
496
|
+
|
|
497
|
+
def update_content_size(self, instance, value):
|
|
498
|
+
self.content_size = self.content.size
|
|
499
|
+
|
|
500
|
+
def adjust_position(self):
|
|
501
|
+
if self.limit_to is not None and not self._temporarily_ignore_limits:
|
|
502
|
+
if self.limit_to is EventLoop.window:
|
|
503
|
+
lim_x, lim_y = 0, 0
|
|
504
|
+
lim_top, lim_right = self.limit_to.size
|
|
505
|
+
else:
|
|
506
|
+
lim_x = self.limit_to.x
|
|
507
|
+
lim_y = self.limit_to.y
|
|
508
|
+
lim_top = self.limit_to.top
|
|
509
|
+
lim_right = self.limit_to.right
|
|
510
|
+
|
|
511
|
+
self._temporarily_ignore_limits = True
|
|
512
|
+
|
|
513
|
+
if not (lim_x > self.x and lim_right < self.right):
|
|
514
|
+
self.x = max(lim_x, min(lim_right - self.width, self.x))
|
|
515
|
+
|
|
516
|
+
if not (lim_y > self.y and lim_right < self.right):
|
|
517
|
+
self.y = min(lim_top - self.height, max(lim_y, self.y))
|
|
518
|
+
|
|
519
|
+
self._temporarily_ignore_limits = False
|
|
520
|
+
|
|
521
|
+
def reposition_inner_widgets(self):
|
|
522
|
+
arrow_image_layout = self._arrow_image_layout
|
|
523
|
+
arrow_image_scatter = self._arrow_image_scatter
|
|
524
|
+
arrow_image_scatter_wrapper = self._arrow_image_scatter_wrapper
|
|
525
|
+
content = self.content
|
|
526
|
+
|
|
527
|
+
# Remove the children of the Bubble (BoxLayout) as a first step
|
|
528
|
+
for child in list(self.children):
|
|
529
|
+
super().remove_widget(child)
|
|
530
|
+
|
|
531
|
+
if self.canvas is None or content is None:
|
|
532
|
+
return
|
|
533
|
+
|
|
534
|
+
# find the layout parameters that define a specific bubble setup
|
|
535
|
+
if self._flex_arrow_layout_params is not None:
|
|
536
|
+
layout_params = self._flex_arrow_layout_params
|
|
537
|
+
else:
|
|
538
|
+
layout_params = Bubble.ARROW_LAYOUTS[self.arrow_pos]
|
|
539
|
+
(bubble_orientation,
|
|
540
|
+
widget_order,
|
|
541
|
+
arrow_size_hint,
|
|
542
|
+
arrow_rotation,
|
|
543
|
+
arrow_pos_hint) = layout_params
|
|
544
|
+
|
|
545
|
+
# rotate the arrow, place it at the right pos and setup the size
|
|
546
|
+
# of the widget, so the BoxLayout can do the rest.
|
|
547
|
+
arrow_image_scatter.rotation = arrow_rotation
|
|
548
|
+
arrow_image_scatter_wrapper.size = arrow_image_scatter.bbox[1]
|
|
549
|
+
arrow_image_scatter_wrapper.pos_hint = arrow_pos_hint
|
|
550
|
+
arrow_image_layout.size_hint = arrow_size_hint
|
|
551
|
+
arrow_image_layout.size = arrow_image_scatter.bbox[1]
|
|
552
|
+
|
|
553
|
+
# set the orientation of the Bubble (BoxLayout)
|
|
554
|
+
self.orientation = bubble_orientation
|
|
555
|
+
|
|
556
|
+
# Add the updated children of the Bubble (BoxLayout) and update
|
|
557
|
+
# properties
|
|
558
|
+
widgets_to_add = [content, arrow_image_layout]
|
|
559
|
+
|
|
560
|
+
# Set the arrow_margin, so we can use this property for proper sizing
|
|
561
|
+
# of the Bubble Widget.
|
|
562
|
+
# Determine whether to add the arrow_image_layout to the
|
|
563
|
+
# Bubble (BoxLayout) or not.
|
|
564
|
+
arrow_margin_x, arrow_margin_y = (0, 0)
|
|
565
|
+
if self.show_arrow:
|
|
566
|
+
if bubble_orientation[0] == "h":
|
|
567
|
+
arrow_margin_x = arrow_image_layout.width
|
|
568
|
+
elif bubble_orientation[0] == "v":
|
|
569
|
+
arrow_margin_y = arrow_image_layout.height
|
|
570
|
+
else:
|
|
571
|
+
widgets_to_add.pop(1)
|
|
572
|
+
|
|
573
|
+
for widget in widgets_to_add[::widget_order]:
|
|
574
|
+
super().add_widget(widget)
|
|
575
|
+
|
|
576
|
+
self.arrow_margin = (arrow_margin_x, arrow_margin_y)
|