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/geometry.py
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Geometry utilities
|
|
3
|
+
==================
|
|
4
|
+
|
|
5
|
+
This module contains some helper functions for geometric calculations.
|
|
6
|
+
'''
|
|
7
|
+
|
|
8
|
+
__all__ = ('circumcircle', 'minimum_bounding_circle')
|
|
9
|
+
|
|
10
|
+
from kivy.vector import Vector
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def circumcircle(a, b, c):
|
|
14
|
+
'''
|
|
15
|
+
Computes the circumcircle of a triangle defined by a, b, c.
|
|
16
|
+
See: http://en.wikipedia.org/wiki/Circumscribed_circle
|
|
17
|
+
|
|
18
|
+
:Parameters:
|
|
19
|
+
`a`: iterable containing at least 2 values (for x and y)
|
|
20
|
+
The 1st point of the triangle.
|
|
21
|
+
`b`: iterable containing at least 2 values (for x and y)
|
|
22
|
+
The 2nd point of the triangle.
|
|
23
|
+
`c`: iterable containing at least 2 values (for x and y)
|
|
24
|
+
The 3rd point of the triangle.
|
|
25
|
+
|
|
26
|
+
:Return:
|
|
27
|
+
A tuple that defines the circle :
|
|
28
|
+
* The first element in the returned tuple is the center as (x, y)
|
|
29
|
+
* The second is the radius (float)
|
|
30
|
+
'''
|
|
31
|
+
P = Vector(a[0], a[1])
|
|
32
|
+
Q = Vector(b[0], b[1])
|
|
33
|
+
R = Vector(c[0], c[1])
|
|
34
|
+
|
|
35
|
+
mPQ = (P + Q) * .5
|
|
36
|
+
mQR = (Q + R) * .5
|
|
37
|
+
|
|
38
|
+
numer = -(- mPQ.y * R.y + mPQ.y * Q.y + mQR.y * R.y - mQR.y * Q.y -
|
|
39
|
+
mPQ.x * R.x + mPQ.x * Q.x + mQR.x * R.x - mQR.x * Q.x)
|
|
40
|
+
denom = (-Q.x * R.y + P.x * R.y - P.x * Q.y +
|
|
41
|
+
Q.y * R.x - P.y * R.x + P.y * Q.x)
|
|
42
|
+
|
|
43
|
+
t = numer / denom
|
|
44
|
+
|
|
45
|
+
cx = -t * (Q.y - P.y) + mPQ.x
|
|
46
|
+
cy = t * (Q.x - P.x) + mPQ.y
|
|
47
|
+
|
|
48
|
+
return ((cx, cy), (P - (cx, cy)).length())
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def minimum_bounding_circle(points):
|
|
52
|
+
'''
|
|
53
|
+
Returns the minimum bounding circle for a set of points.
|
|
54
|
+
|
|
55
|
+
For a description of the problem being solved, see the `Smallest Circle
|
|
56
|
+
Problem <http://en.wikipedia.org/wiki/Smallest_circle_problem>`_.
|
|
57
|
+
|
|
58
|
+
The function uses Applet's Algorithm, the runtime is ``O(h^3, *n)``,
|
|
59
|
+
where h is the number of points in the convex hull of the set of points.
|
|
60
|
+
**But** it runs in linear time in almost all real world cases.
|
|
61
|
+
See: http://tinyurl.com/6e4n5yb
|
|
62
|
+
|
|
63
|
+
:Parameters:
|
|
64
|
+
`points`: iterable
|
|
65
|
+
A list of points (2 tuple with x,y coordinates)
|
|
66
|
+
|
|
67
|
+
:Return:
|
|
68
|
+
A tuple that defines the circle:
|
|
69
|
+
* The first element in the returned tuple is the center (x, y)
|
|
70
|
+
* The second the radius (float)
|
|
71
|
+
|
|
72
|
+
'''
|
|
73
|
+
points = [Vector(p[0], p[1]) for p in points]
|
|
74
|
+
|
|
75
|
+
if len(points) == 1:
|
|
76
|
+
return (points[0].x, points[0].y), 0.0
|
|
77
|
+
|
|
78
|
+
if len(points) == 2:
|
|
79
|
+
p1, p2 = points
|
|
80
|
+
return (p1 + p2) * .5, ((p1 - p2) * .5).length()
|
|
81
|
+
|
|
82
|
+
# determine a point P with the smallest y value
|
|
83
|
+
P = min(points, key=lambda p: p.y)
|
|
84
|
+
|
|
85
|
+
# find a point Q such that the angle of the line segment
|
|
86
|
+
# PQ with the x axis is minimal
|
|
87
|
+
def x_axis_angle(q):
|
|
88
|
+
if q == P:
|
|
89
|
+
return 1e10 # max val if the same, to skip
|
|
90
|
+
return abs((q - P).angle((1, 0)))
|
|
91
|
+
Q = min(points, key=x_axis_angle)
|
|
92
|
+
|
|
93
|
+
for p in points:
|
|
94
|
+
# find R such that angle PRQ is minimal
|
|
95
|
+
def angle_pq(r):
|
|
96
|
+
if r in (P, Q):
|
|
97
|
+
return 1e10 # max val if the same, to skip
|
|
98
|
+
return abs((r - P).angle(r - Q))
|
|
99
|
+
R = min(points, key=angle_pq)
|
|
100
|
+
|
|
101
|
+
# check for case 1 (angle PRQ is obtuse), the circle is determined
|
|
102
|
+
# by two points, P and Q. radius = |(P-Q)/2|, center = (P+Q)/2
|
|
103
|
+
if angle_pq(R) > 90.0:
|
|
104
|
+
return (P + Q) * .5, ((P - Q) * .5).length()
|
|
105
|
+
|
|
106
|
+
# if angle RPQ is obtuse, make P = R, and try again
|
|
107
|
+
if abs((R - P).angle(Q - P)) > 90:
|
|
108
|
+
P = R
|
|
109
|
+
continue
|
|
110
|
+
|
|
111
|
+
# if angle PQR is obtuse, make Q = R, and try again
|
|
112
|
+
if abs((P - Q).angle(R - Q)) > 90:
|
|
113
|
+
Q = R
|
|
114
|
+
continue
|
|
115
|
+
|
|
116
|
+
# all angles were acute..we just need the circle through the
|
|
117
|
+
# two points furthest apart!
|
|
118
|
+
break
|
|
119
|
+
|
|
120
|
+
# find the circumcenter for triangle given by P,Q,R
|
|
121
|
+
return circumcircle(P, Q, R)
|
kivy/gesture.py
ADDED
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Gesture recognition
|
|
3
|
+
===================
|
|
4
|
+
|
|
5
|
+
This class allows you to easily create new
|
|
6
|
+
gestures and compare them::
|
|
7
|
+
|
|
8
|
+
from kivy.gesture import Gesture, GestureDatabase
|
|
9
|
+
|
|
10
|
+
# Create a gesture
|
|
11
|
+
g = Gesture()
|
|
12
|
+
g.add_stroke(point_list=[(1,1), (3,4), (2,1)])
|
|
13
|
+
g.normalize()
|
|
14
|
+
|
|
15
|
+
# Add it to the database
|
|
16
|
+
gdb = GestureDatabase()
|
|
17
|
+
gdb.add_gesture(g)
|
|
18
|
+
|
|
19
|
+
# And for the next gesture, try to find it!
|
|
20
|
+
g2 = Gesture()
|
|
21
|
+
# ...
|
|
22
|
+
gdb.find(g2)
|
|
23
|
+
|
|
24
|
+
.. warning::
|
|
25
|
+
|
|
26
|
+
You don't really want to do this: it's more of an example of how
|
|
27
|
+
to construct gestures dynamically. Typically, you would
|
|
28
|
+
need a lot more points, so it's better to record gestures in a file and
|
|
29
|
+
reload them to compare later. Look in the examples/gestures directory for
|
|
30
|
+
an example of how to do that.
|
|
31
|
+
|
|
32
|
+
'''
|
|
33
|
+
|
|
34
|
+
__all__ = ('Gesture', 'GestureDatabase', 'GesturePoint', 'GestureStroke')
|
|
35
|
+
|
|
36
|
+
import pickle
|
|
37
|
+
import base64
|
|
38
|
+
import zlib
|
|
39
|
+
import math
|
|
40
|
+
|
|
41
|
+
from kivy.vector import Vector
|
|
42
|
+
|
|
43
|
+
from io import BytesIO
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class GestureDatabase(object):
|
|
47
|
+
'''Class to handle a gesture database.'''
|
|
48
|
+
|
|
49
|
+
def __init__(self):
|
|
50
|
+
self.db = []
|
|
51
|
+
|
|
52
|
+
def add_gesture(self, gesture):
|
|
53
|
+
'''Add a new gesture to the database.'''
|
|
54
|
+
self.db.append(gesture)
|
|
55
|
+
|
|
56
|
+
def find(self, gesture, minscore=0.9, rotation_invariant=True):
|
|
57
|
+
'''Find a matching gesture in the database.'''
|
|
58
|
+
if not gesture:
|
|
59
|
+
return
|
|
60
|
+
|
|
61
|
+
best = None
|
|
62
|
+
bestscore = minscore
|
|
63
|
+
for g in self.db:
|
|
64
|
+
score = g.get_score(gesture, rotation_invariant)
|
|
65
|
+
if score < bestscore:
|
|
66
|
+
continue
|
|
67
|
+
bestscore = score
|
|
68
|
+
best = g
|
|
69
|
+
if not best:
|
|
70
|
+
return
|
|
71
|
+
return (bestscore, best)
|
|
72
|
+
|
|
73
|
+
def gesture_to_str(self, gesture):
|
|
74
|
+
'''Convert a gesture into a unique string.'''
|
|
75
|
+
io = BytesIO()
|
|
76
|
+
p = pickle.Pickler(io)
|
|
77
|
+
p.dump(gesture)
|
|
78
|
+
data = base64.b64encode(zlib.compress(io.getvalue(), 9))
|
|
79
|
+
return data
|
|
80
|
+
|
|
81
|
+
def str_to_gesture(self, data):
|
|
82
|
+
'''Convert a unique string to a gesture.'''
|
|
83
|
+
io = BytesIO(zlib.decompress(base64.b64decode(data)))
|
|
84
|
+
p = pickle.Unpickler(io)
|
|
85
|
+
gesture = p.load()
|
|
86
|
+
return gesture
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class GesturePoint:
|
|
90
|
+
|
|
91
|
+
def __init__(self, x, y):
|
|
92
|
+
'''Stores the x,y coordinates of a point in the gesture.'''
|
|
93
|
+
self.x = float(x)
|
|
94
|
+
self.y = float(y)
|
|
95
|
+
|
|
96
|
+
def scale(self, factor):
|
|
97
|
+
''' Scales the point by the given factor.'''
|
|
98
|
+
self.x *= factor
|
|
99
|
+
self.y *= factor
|
|
100
|
+
return self
|
|
101
|
+
|
|
102
|
+
def __repr__(self):
|
|
103
|
+
return 'Mouse_point: %f,%f' % (self.x, self.y)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class GestureStroke:
|
|
107
|
+
''' Gestures can be made up of multiple strokes.'''
|
|
108
|
+
|
|
109
|
+
def __init__(self):
|
|
110
|
+
''' A stroke in the gesture.'''
|
|
111
|
+
self.points = list()
|
|
112
|
+
self.screenpoints = list()
|
|
113
|
+
|
|
114
|
+
# These return the min and max coordinates of the stroke
|
|
115
|
+
@property
|
|
116
|
+
def max_x(self):
|
|
117
|
+
if len(self.points) == 0:
|
|
118
|
+
return 0
|
|
119
|
+
return max(self.points, key=lambda pt: pt.x).x
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def min_x(self):
|
|
123
|
+
if len(self.points) == 0:
|
|
124
|
+
return 0
|
|
125
|
+
return min(self.points, key=lambda pt: pt.x).x
|
|
126
|
+
|
|
127
|
+
@property
|
|
128
|
+
def max_y(self):
|
|
129
|
+
if len(self.points) == 0:
|
|
130
|
+
return 0
|
|
131
|
+
return max(self.points, key=lambda pt: pt.y).y
|
|
132
|
+
|
|
133
|
+
@property
|
|
134
|
+
def min_y(self):
|
|
135
|
+
if len(self.points) == 0:
|
|
136
|
+
return 0
|
|
137
|
+
return min(self.points, key=lambda pt: pt.y).y
|
|
138
|
+
|
|
139
|
+
def add_point(self, x, y):
|
|
140
|
+
'''
|
|
141
|
+
add_point(x=x_pos, y=y_pos)
|
|
142
|
+
Adds a point to the stroke.
|
|
143
|
+
'''
|
|
144
|
+
self.points.append(GesturePoint(x, y))
|
|
145
|
+
self.screenpoints.append((x, y))
|
|
146
|
+
|
|
147
|
+
def scale_stroke(self, scale_factor):
|
|
148
|
+
'''
|
|
149
|
+
scale_stroke(scale_factor=float)
|
|
150
|
+
Scales the stroke down by scale_factor.
|
|
151
|
+
'''
|
|
152
|
+
self.points = [pt.scale(scale_factor) for pt in self.points]
|
|
153
|
+
|
|
154
|
+
def points_distance(self, point1, point2):
|
|
155
|
+
'''
|
|
156
|
+
points_distance(point1=GesturePoint, point2=GesturePoint)
|
|
157
|
+
Returns the distance between two GesturePoints.
|
|
158
|
+
'''
|
|
159
|
+
x = point1.x - point2.x
|
|
160
|
+
y = point1.y - point2.y
|
|
161
|
+
return math.sqrt(x * x + y * y)
|
|
162
|
+
|
|
163
|
+
def stroke_length(self, point_list=None):
|
|
164
|
+
'''Finds the length of the stroke. If a point list is given,
|
|
165
|
+
finds the length of that list.
|
|
166
|
+
'''
|
|
167
|
+
if point_list is None:
|
|
168
|
+
point_list = self.points
|
|
169
|
+
gesture_length = 0.0
|
|
170
|
+
if len(point_list) <= 1: # If there is only one point -> no length
|
|
171
|
+
return gesture_length
|
|
172
|
+
for i in range(len(point_list) - 1):
|
|
173
|
+
gesture_length += self.points_distance(
|
|
174
|
+
point_list[i], point_list[i + 1])
|
|
175
|
+
return gesture_length
|
|
176
|
+
|
|
177
|
+
def normalize_stroke(self, sample_points=32):
|
|
178
|
+
'''Normalizes strokes so that every stroke has a standard number of
|
|
179
|
+
points. Returns True if stroke is normalized, False if it can't be
|
|
180
|
+
normalized. sample_points controls the resolution of the stroke.
|
|
181
|
+
'''
|
|
182
|
+
# If there is only one point or the length is 0, don't normalize
|
|
183
|
+
if len(self.points) <= 1 or self.stroke_length(self.points) == 0.0:
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
# Calculate how long each point should be in the stroke
|
|
187
|
+
target_stroke_size = \
|
|
188
|
+
self.stroke_length(self.points) / float(sample_points)
|
|
189
|
+
new_points = list()
|
|
190
|
+
new_points.append(self.points[0])
|
|
191
|
+
|
|
192
|
+
# We loop on the points
|
|
193
|
+
prev = self.points[0]
|
|
194
|
+
src_distance = 0.0
|
|
195
|
+
dst_distance = target_stroke_size
|
|
196
|
+
for curr in self.points[1:]:
|
|
197
|
+
d = self.points_distance(prev, curr)
|
|
198
|
+
if d > 0:
|
|
199
|
+
prev = curr
|
|
200
|
+
src_distance = src_distance + d
|
|
201
|
+
|
|
202
|
+
# The new point need to be inserted into the
|
|
203
|
+
# segment [prev, curr]
|
|
204
|
+
while dst_distance < src_distance:
|
|
205
|
+
x_dir = curr.x - prev.x
|
|
206
|
+
y_dir = curr.y - prev.y
|
|
207
|
+
ratio = (src_distance - dst_distance) / d
|
|
208
|
+
to_x = x_dir * ratio + prev.x
|
|
209
|
+
to_y = y_dir * ratio + prev.y
|
|
210
|
+
new_points.append(GesturePoint(to_x, to_y))
|
|
211
|
+
dst_distance = self.stroke_length(self.points) / \
|
|
212
|
+
float(sample_points) * len(new_points)
|
|
213
|
+
|
|
214
|
+
# If this happens, we are into troubles...
|
|
215
|
+
if not len(new_points) == sample_points:
|
|
216
|
+
raise ValueError('Invalid number of strokes points; got '
|
|
217
|
+
'%d while it should be %d' %
|
|
218
|
+
(len(new_points), sample_points))
|
|
219
|
+
|
|
220
|
+
self.points = new_points
|
|
221
|
+
return True
|
|
222
|
+
|
|
223
|
+
def center_stroke(self, offset_x, offset_y):
|
|
224
|
+
'''Centers the stroke by offsetting the points.'''
|
|
225
|
+
for point in self.points:
|
|
226
|
+
point.x -= offset_x
|
|
227
|
+
point.y -= offset_y
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
class Gesture:
|
|
231
|
+
'''A python implementation of a gesture recognition algorithm by
|
|
232
|
+
Oleg Dopertchouk: http://www.gamedev.net/reference/articles/article2039.asp
|
|
233
|
+
|
|
234
|
+
Implemented by Jeiel Aranal (chemikhazi@gmail.com),
|
|
235
|
+
released into the public domain.
|
|
236
|
+
'''
|
|
237
|
+
|
|
238
|
+
# Tolerance for evaluation using the '==' operator
|
|
239
|
+
DEFAULT_TOLERANCE = 0.1
|
|
240
|
+
|
|
241
|
+
def __init__(self, tolerance=None):
|
|
242
|
+
'''
|
|
243
|
+
Gesture([tolerance=float])
|
|
244
|
+
Creates a new gesture with an optional matching tolerance value.
|
|
245
|
+
'''
|
|
246
|
+
self.width = 0.
|
|
247
|
+
self.height = 0.
|
|
248
|
+
self.gesture_product = 0.
|
|
249
|
+
self.strokes = list()
|
|
250
|
+
if tolerance is None:
|
|
251
|
+
self.tolerance = Gesture.DEFAULT_TOLERANCE
|
|
252
|
+
else:
|
|
253
|
+
self.tolerance = tolerance
|
|
254
|
+
|
|
255
|
+
def _scale_gesture(self):
|
|
256
|
+
''' Scales down the gesture to a unit of 1.'''
|
|
257
|
+
# map() creates a list of min/max coordinates of the strokes
|
|
258
|
+
# in the gesture and min()/max() pulls the lowest/highest value
|
|
259
|
+
min_x = min([stroke.min_x for stroke in self.strokes])
|
|
260
|
+
max_x = max([stroke.max_x for stroke in self.strokes])
|
|
261
|
+
min_y = min([stroke.min_y for stroke in self.strokes])
|
|
262
|
+
max_y = max([stroke.max_y for stroke in self.strokes])
|
|
263
|
+
x_len = max_x - min_x
|
|
264
|
+
self.width = x_len
|
|
265
|
+
y_len = max_y - min_y
|
|
266
|
+
self.height = y_len
|
|
267
|
+
scale_factor = max(x_len, y_len)
|
|
268
|
+
if scale_factor <= 0.0:
|
|
269
|
+
return False
|
|
270
|
+
scale_factor = 1.0 / scale_factor
|
|
271
|
+
for stroke in self.strokes:
|
|
272
|
+
stroke.scale_stroke(scale_factor)
|
|
273
|
+
return True
|
|
274
|
+
|
|
275
|
+
def _center_gesture(self):
|
|
276
|
+
''' Centers the Gesture.points of the gesture.'''
|
|
277
|
+
total_x = 0.0
|
|
278
|
+
total_y = 0.0
|
|
279
|
+
total_points = 0
|
|
280
|
+
|
|
281
|
+
for stroke in self.strokes:
|
|
282
|
+
# adds up all the points inside the stroke
|
|
283
|
+
stroke_y = sum([pt.y for pt in stroke.points])
|
|
284
|
+
stroke_x = sum([pt.x for pt in stroke.points])
|
|
285
|
+
total_y += stroke_y
|
|
286
|
+
total_x += stroke_x
|
|
287
|
+
total_points += len(stroke.points)
|
|
288
|
+
if total_points == 0:
|
|
289
|
+
return False
|
|
290
|
+
# Average to get the offset
|
|
291
|
+
total_x /= total_points
|
|
292
|
+
total_y /= total_points
|
|
293
|
+
# Apply the offset to the strokes
|
|
294
|
+
for stroke in self.strokes:
|
|
295
|
+
stroke.center_stroke(total_x, total_y)
|
|
296
|
+
return True
|
|
297
|
+
|
|
298
|
+
def add_stroke(self, point_list=None):
|
|
299
|
+
'''Adds a stroke to the gesture and returns the Stroke instance.
|
|
300
|
+
Optional point_list argument is a list of the mouse points for
|
|
301
|
+
the stroke.
|
|
302
|
+
'''
|
|
303
|
+
self.strokes.append(GestureStroke())
|
|
304
|
+
if isinstance(point_list, list) or isinstance(point_list, tuple):
|
|
305
|
+
for point in point_list:
|
|
306
|
+
if isinstance(point, GesturePoint):
|
|
307
|
+
self.strokes[-1].points.append(point)
|
|
308
|
+
elif isinstance(point, list) or isinstance(point, tuple):
|
|
309
|
+
if len(point) != 2:
|
|
310
|
+
raise ValueError("Stroke entry must have 2 values max")
|
|
311
|
+
self.strokes[-1].add_point(point[0], point[1])
|
|
312
|
+
else:
|
|
313
|
+
raise TypeError("The point list should either be "
|
|
314
|
+
"tuples of x and y or a list of "
|
|
315
|
+
"GesturePoint objects")
|
|
316
|
+
elif point_list is not None:
|
|
317
|
+
raise ValueError("point_list should be a tuple/list")
|
|
318
|
+
return self.strokes[-1]
|
|
319
|
+
|
|
320
|
+
def normalize(self, stroke_samples=32):
|
|
321
|
+
'''Runs the gesture normalization algorithm and calculates the dot
|
|
322
|
+
product with self.
|
|
323
|
+
'''
|
|
324
|
+
if not self._scale_gesture() or not self._center_gesture():
|
|
325
|
+
self.gesture_product = False
|
|
326
|
+
return False
|
|
327
|
+
for stroke in self.strokes:
|
|
328
|
+
stroke.normalize_stroke(stroke_samples)
|
|
329
|
+
self.gesture_product = self.dot_product(self)
|
|
330
|
+
|
|
331
|
+
def get_rigid_rotation(self, dstpts):
|
|
332
|
+
'''
|
|
333
|
+
Extract the rotation to apply to a group of points to minimize the
|
|
334
|
+
distance to a second group of points. The two groups of points are
|
|
335
|
+
assumed to be centered. This is a simple version that just picks
|
|
336
|
+
an angle based on the first point of the gesture.
|
|
337
|
+
'''
|
|
338
|
+
if len(self.strokes) < 1 or len(self.strokes[0].points) < 1:
|
|
339
|
+
return 0
|
|
340
|
+
if len(dstpts.strokes) < 1 or len(dstpts.strokes[0].points) < 1:
|
|
341
|
+
return 0
|
|
342
|
+
p = dstpts.strokes[0].points[0]
|
|
343
|
+
target = Vector([p.x, p.y])
|
|
344
|
+
source = Vector([p.x, p.y])
|
|
345
|
+
return source.angle(target)
|
|
346
|
+
|
|
347
|
+
def dot_product(self, comparison_gesture):
|
|
348
|
+
''' Calculates the dot product of the gesture with another gesture.'''
|
|
349
|
+
if len(comparison_gesture.strokes) != len(self.strokes):
|
|
350
|
+
return -1
|
|
351
|
+
if getattr(comparison_gesture, 'gesture_product', True) is False or \
|
|
352
|
+
getattr(self, 'gesture_product', True) is False:
|
|
353
|
+
return -1
|
|
354
|
+
dot_product = 0.0
|
|
355
|
+
for stroke_index, (my_stroke, cmp_stroke) in enumerate(
|
|
356
|
+
list(zip(self.strokes, comparison_gesture.strokes))):
|
|
357
|
+
for pt_index, (my_point, cmp_point) in enumerate(
|
|
358
|
+
list(zip(my_stroke.points, cmp_stroke.points))):
|
|
359
|
+
dot_product += (my_point.x * cmp_point.x +
|
|
360
|
+
my_point.y * cmp_point.y)
|
|
361
|
+
return dot_product
|
|
362
|
+
|
|
363
|
+
def rotate(self, angle):
|
|
364
|
+
g = Gesture()
|
|
365
|
+
for stroke in self.strokes:
|
|
366
|
+
tmp = []
|
|
367
|
+
for j in stroke.points:
|
|
368
|
+
v = Vector([j.x, j.y]).rotate(angle)
|
|
369
|
+
tmp.append(v)
|
|
370
|
+
g.add_stroke(tmp)
|
|
371
|
+
g.gesture_product = g.dot_product(g)
|
|
372
|
+
return g
|
|
373
|
+
|
|
374
|
+
def get_score(self, comparison_gesture, rotation_invariant=True):
|
|
375
|
+
''' Returns the matching score of the gesture against another gesture.
|
|
376
|
+
'''
|
|
377
|
+
if isinstance(comparison_gesture, Gesture):
|
|
378
|
+
if rotation_invariant:
|
|
379
|
+
# get orientation
|
|
380
|
+
angle = self.get_rigid_rotation(comparison_gesture)
|
|
381
|
+
|
|
382
|
+
# rotate the gesture to be in the same frame.
|
|
383
|
+
comparison_gesture = comparison_gesture.rotate(angle)
|
|
384
|
+
|
|
385
|
+
# this is the normal "orientation" code.
|
|
386
|
+
score = self.dot_product(comparison_gesture)
|
|
387
|
+
if score <= 0:
|
|
388
|
+
return score
|
|
389
|
+
score /= math.sqrt(
|
|
390
|
+
self.gesture_product * comparison_gesture.gesture_product)
|
|
391
|
+
return score
|
|
392
|
+
|
|
393
|
+
def __eq__(self, comparison_gesture):
|
|
394
|
+
''' Allows easy comparisons between gesture instances.'''
|
|
395
|
+
if isinstance(comparison_gesture, Gesture):
|
|
396
|
+
# If the gestures don't have the same number of strokes, its
|
|
397
|
+
# definitely not the same gesture
|
|
398
|
+
score = self.get_score(comparison_gesture)
|
|
399
|
+
if (score > (1.0 - self.tolerance) and
|
|
400
|
+
score < (1.0 + self.tolerance)):
|
|
401
|
+
return True
|
|
402
|
+
else:
|
|
403
|
+
return False
|
|
404
|
+
else:
|
|
405
|
+
return NotImplemented
|
|
406
|
+
|
|
407
|
+
def __ne__(self, comparison_gesture):
|
|
408
|
+
result = self.__eq__(comparison_gesture)
|
|
409
|
+
if result is NotImplemented:
|
|
410
|
+
return result
|
|
411
|
+
else:
|
|
412
|
+
return not result
|
|
413
|
+
|
|
414
|
+
def __lt__(self, comparison_gesture):
|
|
415
|
+
raise TypeError("Gesture cannot be evaluated with <")
|
|
416
|
+
|
|
417
|
+
def __gt__(self, comparison_gesture):
|
|
418
|
+
raise TypeError("Gesture cannot be evaluated with >")
|
|
419
|
+
|
|
420
|
+
def __le__(self, comparison_gesture):
|
|
421
|
+
raise TypeError("Gesture cannot be evaluated with <=")
|
|
422
|
+
|
|
423
|
+
def __ge__(self, comparison_gesture):
|
|
424
|
+
raise TypeError("Gesture cannot be evaluated with >=")
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Graphics
|
|
3
|
+
========
|
|
4
|
+
|
|
5
|
+
This package assembles many low level functions used for drawing. The whole
|
|
6
|
+
graphics package is compatible with OpenGL ES 2.0 and has many rendering
|
|
7
|
+
optimizations.
|
|
8
|
+
|
|
9
|
+
The basics
|
|
10
|
+
----------
|
|
11
|
+
|
|
12
|
+
For drawing on a screen, you will need :
|
|
13
|
+
|
|
14
|
+
1. a :class:`~kivy.graphics.instructions.Canvas` object.
|
|
15
|
+
2. :class:`~kivy.graphics.instructions.Instruction` objects.
|
|
16
|
+
|
|
17
|
+
Each :class:`~kivy.uix.widget.Widget`
|
|
18
|
+
in Kivy already has a :class:`Canvas` by default. When you create
|
|
19
|
+
a widget, you can create all the instructions needed for drawing. If
|
|
20
|
+
`self` is your current widget, you can do::
|
|
21
|
+
|
|
22
|
+
from kivy.graphics import *
|
|
23
|
+
with self.canvas:
|
|
24
|
+
# Add a red color
|
|
25
|
+
Color(1., 0, 0)
|
|
26
|
+
|
|
27
|
+
# Add a rectangle
|
|
28
|
+
Rectangle(pos=(10, 10), size=(500, 500))
|
|
29
|
+
|
|
30
|
+
The instructions :class:`Color` and :class:`Rectangle` are automatically added
|
|
31
|
+
to the canvas object and will be used when the window is drawn.
|
|
32
|
+
|
|
33
|
+
.. note::
|
|
34
|
+
|
|
35
|
+
Kivy drawing instructions are not automatically relative to the position
|
|
36
|
+
or size of the widget. You, therefore, need to consider these factors when
|
|
37
|
+
drawing. In order to make your drawing instructions relative to the widget,
|
|
38
|
+
the instructions need either to be
|
|
39
|
+
declared in the :mod:`KvLang <kivy.lang>` or bound to pos and size changes.
|
|
40
|
+
Please see :ref:`adding_widget_background` for more detail.
|
|
41
|
+
|
|
42
|
+
GL Reloading mechanism
|
|
43
|
+
----------------------
|
|
44
|
+
|
|
45
|
+
.. versionadded:: 1.2.0
|
|
46
|
+
|
|
47
|
+
During the lifetime of the application, the OpenGL context might be lost. This
|
|
48
|
+
happens:
|
|
49
|
+
|
|
50
|
+
- when the window is resized on OS X or the Windows platform and you're
|
|
51
|
+
using pygame as a window provider. This is due to SDL 1.2. In the SDL 1.2
|
|
52
|
+
design, it needs to recreate a GL context everytime the window is
|
|
53
|
+
resized. This was fixed in SDL 1.3 but pygame is not yet available on it
|
|
54
|
+
by default.
|
|
55
|
+
|
|
56
|
+
- when Android releases the app resources: when your application goes to the
|
|
57
|
+
background, Android might reclaim your opengl context to give the
|
|
58
|
+
resource to another app. When the user switches back to your application, a
|
|
59
|
+
newly created gl context is given to your app.
|
|
60
|
+
|
|
61
|
+
Starting from 1.2.0, we have introduced a mechanism for reloading all the
|
|
62
|
+
graphics resources using the GPU: Canvas, FBO, Shader, Texture, VBO,
|
|
63
|
+
and VertexBatch:
|
|
64
|
+
|
|
65
|
+
- VBO and VertexBatch are constructed by our graphics instructions. We have all
|
|
66
|
+
the data needed to reconstruct when reloading.
|
|
67
|
+
|
|
68
|
+
- Shader: same as VBO, we store the source and values used in the
|
|
69
|
+
shader so we are able to recreate the vertex/fragment/program.
|
|
70
|
+
|
|
71
|
+
- Texture: if the texture has a source (an image file or atlas), the image
|
|
72
|
+
is reloaded from the source and reuploaded to the GPU.
|
|
73
|
+
|
|
74
|
+
You should cover these cases yourself:
|
|
75
|
+
|
|
76
|
+
- Textures without a source: if you manually created a texture and manually
|
|
77
|
+
blit data / a buffer to it, you must handle the reloading yourself. Check the
|
|
78
|
+
:doc:`api-kivy.graphics.texture` to learn how to manage that case. (The text
|
|
79
|
+
rendering already generates the texture and handles the reloading. You
|
|
80
|
+
don't need to reload text yourself.)
|
|
81
|
+
|
|
82
|
+
- FBO: if you added / removed / drew things multiple times on the FBO, we
|
|
83
|
+
can't reload it. We don't keep a history of the instructions put on it.
|
|
84
|
+
As for textures without a source, check the :doc:`api-kivy.graphics.fbo` to
|
|
85
|
+
learn how to manage that case.
|
|
86
|
+
|
|
87
|
+
'''
|
|
88
|
+
|
|
89
|
+
from kivy.graphics.instructions import Callback, Canvas, CanvasBase, \
|
|
90
|
+
ContextInstruction, Instruction, InstructionGroup, RenderContext, \
|
|
91
|
+
VertexInstruction
|
|
92
|
+
from kivy.graphics.context_instructions import BindTexture, Color, \
|
|
93
|
+
PushState, ChangeState, PopState, MatrixInstruction, ApplyContextMatrix, \
|
|
94
|
+
PopMatrix, PushMatrix, Rotate, Scale, Translate, LoadIdentity, \
|
|
95
|
+
UpdateNormalMatrix, gl_init_resources
|
|
96
|
+
from kivy.graphics.vertex_instructions import Bezier, BorderImage, Ellipse, \
|
|
97
|
+
GraphicException, Line, Mesh, Point, Quad, Rectangle, RoundedRectangle, \
|
|
98
|
+
Triangle, SmoothLine, SmoothRectangle, SmoothEllipse, \
|
|
99
|
+
SmoothRoundedRectangle, SmoothQuad, SmoothTriangle
|
|
100
|
+
from kivy.graphics.stencil_instructions import StencilPop, StencilPush, \
|
|
101
|
+
StencilUse, StencilUnUse
|
|
102
|
+
from kivy.graphics.gl_instructions import ClearColor, ClearBuffers
|
|
103
|
+
from kivy.graphics.fbo import Fbo
|
|
104
|
+
from kivy.graphics.boxshadow import BoxShadow
|
|
105
|
+
from kivy.graphics.scissor_instructions import ScissorPush, ScissorPop
|
|
106
|
+
|
|
107
|
+
# very hacky way to avoid pyflakes warning...
|
|
108
|
+
__all__ = (Bezier.__name__, BindTexture.__name__, BorderImage.__name__,
|
|
109
|
+
Callback.__name__, Canvas.__name__, CanvasBase.__name__,
|
|
110
|
+
Color.__name__, ContextInstruction.__name__,
|
|
111
|
+
Ellipse.__name__, Fbo.__name__, GraphicException.__name__,
|
|
112
|
+
Instruction.__name__, InstructionGroup.__name__,
|
|
113
|
+
Line.__name__, SmoothLine.__name__, MatrixInstruction.__name__,
|
|
114
|
+
Mesh.__name__, Point.__name__, PopMatrix.__name__,
|
|
115
|
+
PushMatrix.__name__, Quad.__name__, Rectangle.__name__,
|
|
116
|
+
RenderContext.__name__, Rotate.__name__, Scale.__name__,
|
|
117
|
+
StencilPop.__name__, StencilPush.__name__, StencilUse.__name__,
|
|
118
|
+
StencilUnUse.__name__, Translate.__name__, Triangle.__name__,
|
|
119
|
+
VertexInstruction.__name__, ClearColor.__name__,
|
|
120
|
+
ClearBuffers.__name__, gl_init_resources.__name__,
|
|
121
|
+
PushState.__name__, ChangeState.__name__, PopState.__name__,
|
|
122
|
+
ApplyContextMatrix.__name__, UpdateNormalMatrix.__name__,
|
|
123
|
+
LoadIdentity.__name__, BoxShadow.__name__, SmoothEllipse.__name__,
|
|
124
|
+
SmoothRoundedRectangle.__name__, SmoothRectangle.__name__,
|
|
125
|
+
SmoothQuad.__name__, SmoothTriangle.__name__,
|
|
126
|
+
)
|
|
File without changes
|