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/tools/gallery.py
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
''' Create rst documentation of the examples directory.
|
|
2
|
+
|
|
3
|
+
This uses screenshots in the screenshots_dir
|
|
4
|
+
(currently doc/sources/images/examples) along with source code and files
|
|
5
|
+
in the examples/ directory to create rst files in the generation_dir
|
|
6
|
+
(doc/sources/examples) gallery.rst, index.rst, and gen__*.rst
|
|
7
|
+
|
|
8
|
+
'''
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
import os
|
|
12
|
+
import re
|
|
13
|
+
from os.path import sep
|
|
14
|
+
from os.path import join as slash # just like that name better
|
|
15
|
+
from os.path import dirname, abspath
|
|
16
|
+
import kivy
|
|
17
|
+
from kivy.logger import Logger
|
|
18
|
+
import textwrap
|
|
19
|
+
|
|
20
|
+
# from here to the kivy top
|
|
21
|
+
base_dir = dirname(dirname(abspath(kivy.__file__)))
|
|
22
|
+
examples_dir = slash(base_dir, 'examples')
|
|
23
|
+
screenshots_dir = slash(base_dir, 'doc/sources/images/examples')
|
|
24
|
+
generation_dir = slash(base_dir, 'doc/sources/examples')
|
|
25
|
+
|
|
26
|
+
image_dir = "../images/examples/" # relative to generation_dir
|
|
27
|
+
gallery_filename = slash(generation_dir, 'gallery.rst')
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Info is a dict built up from
|
|
31
|
+
# straight filename information, more from reading the docstring,
|
|
32
|
+
# and more from parsing the description text. Errors are often
|
|
33
|
+
# shown by setting the key 'error' with the value being the error message.
|
|
34
|
+
#
|
|
35
|
+
# It doesn't quite meet the requirements for a class, but is a vocabulary
|
|
36
|
+
# word in this module.
|
|
37
|
+
|
|
38
|
+
def iter_filename_info(dir_name):
|
|
39
|
+
"""
|
|
40
|
+
Yield info (dict) of each matching screenshot found walking the
|
|
41
|
+
directory dir_name. A matching screenshot uses double underscores to
|
|
42
|
+
separate fields, i.e. path__to__filename__py.png as the screenshot for
|
|
43
|
+
examples/path/to/filename.py.
|
|
44
|
+
|
|
45
|
+
Files not ending with .png are ignored, others are either parsed or
|
|
46
|
+
yield an error.
|
|
47
|
+
|
|
48
|
+
Info fields 'dunder', 'dir', 'file', 'ext', 'source' if not 'error'
|
|
49
|
+
"""
|
|
50
|
+
pattern = re.compile(r'^((.+)__(.+)__([^-]+))\.png')
|
|
51
|
+
for t in os.walk(dir_name):
|
|
52
|
+
for filename in t[2]:
|
|
53
|
+
if filename.endswith('.png'):
|
|
54
|
+
m = pattern.match(filename)
|
|
55
|
+
if m is None:
|
|
56
|
+
yield {'error': 'png filename not following screenshot'
|
|
57
|
+
' pattern: {}'.format(filename)}
|
|
58
|
+
else:
|
|
59
|
+
d = m.group(2).replace('__', sep)
|
|
60
|
+
yield {'dunder': m.group(1),
|
|
61
|
+
'dir': d,
|
|
62
|
+
'file': m.group(3),
|
|
63
|
+
'ext': m.group(4),
|
|
64
|
+
'source': slash(d, m.group(3) + '.' + m.group(4))
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def parse_docstring_info(text):
|
|
69
|
+
''' parse docstring from text (normal string with '\n's) and return an info
|
|
70
|
+
dict. A docstring should the first triple quoted string, have a title
|
|
71
|
+
followed by a line of equal signs, and then a description at
|
|
72
|
+
least one sentence long.
|
|
73
|
+
|
|
74
|
+
fields are 'docstring', 'title', and 'first_sentence' if not 'error'
|
|
75
|
+
'first_sentence' is a single line without newlines.
|
|
76
|
+
'''
|
|
77
|
+
q = '\"\"\"|\'\'\''
|
|
78
|
+
p = r'({})\s+([^\n]+)\s+\=+\s+(.*?)(\1)'.format(q)
|
|
79
|
+
m = re.search(p, text, re.S)
|
|
80
|
+
if m:
|
|
81
|
+
comment = m.group(3).replace('\n', ' ')
|
|
82
|
+
first_sentence = comment[:comment.find('.') + 1]
|
|
83
|
+
return {'docstring': m.group(0), 'title': m.group(2),
|
|
84
|
+
'description': m.group(3), 'first_sentence': first_sentence}
|
|
85
|
+
else:
|
|
86
|
+
return {'error': 'Did not find docstring with title at top of file.'}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def iter_docstring_info(dir_name):
|
|
90
|
+
''' Iterate over screenshots in directory, yield info from the file
|
|
91
|
+
name and initial parse of the docstring. Errors are logged, but
|
|
92
|
+
files with errors are skipped.
|
|
93
|
+
'''
|
|
94
|
+
for file_info in iter_filename_info(dir_name):
|
|
95
|
+
if 'error' in file_info:
|
|
96
|
+
Logger.error(file_info['error'])
|
|
97
|
+
continue
|
|
98
|
+
source = slash(examples_dir, file_info['dir'],
|
|
99
|
+
file_info['file'] + '.' + file_info['ext'])
|
|
100
|
+
if not os.path.exists(source):
|
|
101
|
+
Logger.error('Screen shot references source code that does '
|
|
102
|
+
'not exist: %s', source)
|
|
103
|
+
continue
|
|
104
|
+
with open(source) as f:
|
|
105
|
+
text = f.read()
|
|
106
|
+
docstring_info = parse_docstring_info(text)
|
|
107
|
+
if 'error' in docstring_info:
|
|
108
|
+
Logger.error(docstring_info['error'] + ' File: ' + source)
|
|
109
|
+
continue # don't want to show ugly entries
|
|
110
|
+
else:
|
|
111
|
+
file_info.update(docstring_info)
|
|
112
|
+
yield file_info
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def enhance_info_description(info, line_length=79):
|
|
116
|
+
''' Using the info['description'], add fields to info.
|
|
117
|
+
|
|
118
|
+
info['files'] is the source filename and any filenames referenced by the
|
|
119
|
+
magic words in the description, e.g. 'the file xxx.py' or
|
|
120
|
+
'The image this.png'. These are as written in the description, do
|
|
121
|
+
not allow ../dir notation, and are relative to the source directory.
|
|
122
|
+
|
|
123
|
+
info['enhanced_description'] is the description, as an array of
|
|
124
|
+
paragraphs where each paragraph is an array of lines wrapped to width
|
|
125
|
+
line_length. This enhanced description include the rst links to
|
|
126
|
+
the files of info['files'].
|
|
127
|
+
'''
|
|
128
|
+
|
|
129
|
+
# make text a set of long lines, one per paragraph.
|
|
130
|
+
paragraphs = info['description'].split('\n\n')
|
|
131
|
+
lines = [
|
|
132
|
+
paragraph.replace('\n', '$newline$')
|
|
133
|
+
for paragraph in paragraphs
|
|
134
|
+
]
|
|
135
|
+
text = '\n'.join(lines)
|
|
136
|
+
|
|
137
|
+
info['files'] = [info['file'] + '.' + info['ext']]
|
|
138
|
+
regex = r'[tT]he (?:file|image) ([\w\/]+\.\w+)'
|
|
139
|
+
for name in re.findall(regex, text):
|
|
140
|
+
if name not in info['files']:
|
|
141
|
+
info['files'].append(name)
|
|
142
|
+
|
|
143
|
+
# add links where the files are referenced
|
|
144
|
+
folder = '_'.join(info['source'].split(sep)[:-1]) + '_'
|
|
145
|
+
text = re.sub(r'([tT]he (?:file|image) )([\w\/]+\.\w+)',
|
|
146
|
+
r'\1:ref:`\2 <$folder$\2>`', text)
|
|
147
|
+
text = text.replace('$folder$', folder)
|
|
148
|
+
|
|
149
|
+
# now break up text into array of paragraphs, each an array of lines.
|
|
150
|
+
lines = [line.replace('$newline$', '\n') for line in text.split('\n')]
|
|
151
|
+
paragraphs = [
|
|
152
|
+
textwrap.wrap(line, line_length)
|
|
153
|
+
# ignore wrapping if .. note:: or similar block
|
|
154
|
+
if not line.startswith(' ') else [line]
|
|
155
|
+
for line in lines
|
|
156
|
+
]
|
|
157
|
+
info['enhanced_description'] = paragraphs
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def get_infos(dir_name):
|
|
161
|
+
''' return infos, an array info dicts for each matching screenshot in the
|
|
162
|
+
dir, sorted by source file name, and adding the field 'num' as he unique
|
|
163
|
+
order in this array of dicts'.
|
|
164
|
+
|
|
165
|
+
'''
|
|
166
|
+
infos = [i for i in iter_docstring_info(dir_name)]
|
|
167
|
+
infos.sort(key=lambda x: x['source'])
|
|
168
|
+
for num, info in enumerate(infos):
|
|
169
|
+
info['num'] = num
|
|
170
|
+
enhance_info_description(info)
|
|
171
|
+
return infos
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def make_gallery_page(infos):
|
|
175
|
+
''' return string of the rst (Restructured Text) of the gallery page,
|
|
176
|
+
showing information on all screenshots found.
|
|
177
|
+
'''
|
|
178
|
+
|
|
179
|
+
gallery_top = '''
|
|
180
|
+
Gallery
|
|
181
|
+
-------
|
|
182
|
+
|
|
183
|
+
.. _Tutorials: ../tutorials-index.html
|
|
184
|
+
|
|
185
|
+
.. container:: title
|
|
186
|
+
|
|
187
|
+
This gallery lets you explore the many examples included with Kivy.
|
|
188
|
+
Click on any screenshot to see the code.
|
|
189
|
+
|
|
190
|
+
This gallery contains:
|
|
191
|
+
|
|
192
|
+
* Examples from the examples/ directory that show specific capabilities of
|
|
193
|
+
different libraries and features of Kivy.
|
|
194
|
+
* Demonstrations from the examples/demos/ directory that explore many of
|
|
195
|
+
Kivy's abilities.
|
|
196
|
+
|
|
197
|
+
There are more Kivy programs elsewhere:
|
|
198
|
+
|
|
199
|
+
* Tutorials_ walks through the development of complete Kivy applications.
|
|
200
|
+
* Unit tests found in the source code under the subdirectory kivy/tests/
|
|
201
|
+
can also be useful.
|
|
202
|
+
|
|
203
|
+
We hope your journey into learning Kivy is exciting and fun!
|
|
204
|
+
|
|
205
|
+
'''
|
|
206
|
+
output = [gallery_top]
|
|
207
|
+
|
|
208
|
+
for info in infos:
|
|
209
|
+
output.append(
|
|
210
|
+
"\n**{title}** (:doc:`{source}<gen__{dunder}>`)\n"
|
|
211
|
+
"\n{description}"
|
|
212
|
+
"\n.. image:: ../images/examples/{dunder}.png"
|
|
213
|
+
"\n :width: 216pt"
|
|
214
|
+
"\n :align: left"
|
|
215
|
+
"\n :target: gen__{dunder}.html".format(**info))
|
|
216
|
+
return "\n".join(output) + "\n"
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def make_detail_page(info):
|
|
220
|
+
''' return str of the rst text for the detail page of the file in info. '''
|
|
221
|
+
|
|
222
|
+
def a(s=''):
|
|
223
|
+
''' append formatted s to output, which will be joined into lines '''
|
|
224
|
+
output.append(s.format(**info))
|
|
225
|
+
|
|
226
|
+
output = []
|
|
227
|
+
a('{title}')
|
|
228
|
+
a('=' * len(info['title']))
|
|
229
|
+
a('\n.. |pic{num}| image:: /images/examples/{dunder}.png'
|
|
230
|
+
'\n :width: 50%'
|
|
231
|
+
'\n :align: middle')
|
|
232
|
+
a('\n|pic{num}|')
|
|
233
|
+
a()
|
|
234
|
+
for paragraph in info['enhanced_description']:
|
|
235
|
+
for line in paragraph:
|
|
236
|
+
a(line)
|
|
237
|
+
a()
|
|
238
|
+
|
|
239
|
+
# include images
|
|
240
|
+
last_lang = '.py'
|
|
241
|
+
for fname in info['files']:
|
|
242
|
+
full_name = slash(info['dir'], fname)
|
|
243
|
+
ext = re.search(r'\.\w+$', fname).group(0)
|
|
244
|
+
a('\n.. _`' + full_name.replace(sep, '_') + '`:')
|
|
245
|
+
# double separator if building on windows (sphinx skips backslash)
|
|
246
|
+
if '\\' in full_name:
|
|
247
|
+
full_name = full_name.replace(sep, sep * 2)
|
|
248
|
+
|
|
249
|
+
if ext in ['.png', '.jpg', '.jpeg']:
|
|
250
|
+
title = 'Image **' + full_name + '**'
|
|
251
|
+
a('\n' + title)
|
|
252
|
+
a('~' * len(title))
|
|
253
|
+
a('\n.. image:: ../../../examples/' + full_name)
|
|
254
|
+
a(' :align: ' ' center')
|
|
255
|
+
else: # code
|
|
256
|
+
title = 'File **' + full_name + '**'
|
|
257
|
+
a('\n' + title)
|
|
258
|
+
a('~' * len(title))
|
|
259
|
+
if ext != last_lang and ext != '.txt':
|
|
260
|
+
a('\n.. highlight:: ' + ext[1:])
|
|
261
|
+
a(' :linenothreshold: 3')
|
|
262
|
+
last_lang = ext
|
|
263
|
+
# prevent highlight errors with 'none'
|
|
264
|
+
elif ext == '.txt':
|
|
265
|
+
a('\n.. highlight:: none')
|
|
266
|
+
a(' :linenothreshold: 3')
|
|
267
|
+
last_lang = ext
|
|
268
|
+
a('\n.. include:: ../../../examples/' + full_name)
|
|
269
|
+
a(' :code:')
|
|
270
|
+
return '\n'.join(output) + '\n'
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def write_file(name, s):
|
|
274
|
+
''' write the string to the filename '''
|
|
275
|
+
|
|
276
|
+
# Make sure all the directories has been created before
|
|
277
|
+
# trying to write to the file
|
|
278
|
+
directory = os.path.dirname(name)
|
|
279
|
+
if not os.path.exists(directory):
|
|
280
|
+
os.makedirs(directory)
|
|
281
|
+
|
|
282
|
+
with open(name, 'w') as f:
|
|
283
|
+
f.write(s)
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def make_index(infos):
|
|
287
|
+
''' return string of the rst for the gallery's index.rst file. '''
|
|
288
|
+
start_string = '''
|
|
289
|
+
Gallery of Examples
|
|
290
|
+
===================
|
|
291
|
+
|
|
292
|
+
.. toctree::
|
|
293
|
+
:maxdepth: 1
|
|
294
|
+
|
|
295
|
+
gallery'''
|
|
296
|
+
output = [start_string]
|
|
297
|
+
for info in infos:
|
|
298
|
+
output.append(' gen__{}'.format(info['dunder']))
|
|
299
|
+
return '\n'.join(output) + '\n'
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def write_all_rst_pages():
|
|
303
|
+
''' Do the main task of writing the gallery,
|
|
304
|
+
detail, and index rst pages.
|
|
305
|
+
'''
|
|
306
|
+
infos = get_infos(screenshots_dir)
|
|
307
|
+
s = make_gallery_page(infos)
|
|
308
|
+
write_file(gallery_filename, s)
|
|
309
|
+
|
|
310
|
+
for info in infos:
|
|
311
|
+
s = make_detail_page(info)
|
|
312
|
+
detail_name = slash(generation_dir,
|
|
313
|
+
'gen__{}.rst'.format(info['dunder']))
|
|
314
|
+
write_file(detail_name, s)
|
|
315
|
+
|
|
316
|
+
s = make_index(infos)
|
|
317
|
+
index_name = slash(generation_dir, 'index.rst')
|
|
318
|
+
write_file(index_name, s)
|
|
319
|
+
Logger.info('gallery.py: Created gallery rst documentation pages.')
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
if __name__ == '__main__':
|
|
323
|
+
write_all_rst_pages()
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Icon generator
|
|
3
|
+
==============
|
|
4
|
+
|
|
5
|
+
This tool will help you to generate all the icons wanted for Google Play Store,
|
|
6
|
+
App Store, Amazon store.
|
|
7
|
+
'''
|
|
8
|
+
|
|
9
|
+
import sys
|
|
10
|
+
from PIL import Image
|
|
11
|
+
from os.path import exists, join, realpath, basename, dirname
|
|
12
|
+
from os import makedirs
|
|
13
|
+
from argparse import ArgumentParser
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Converter(object):
|
|
17
|
+
|
|
18
|
+
converters = {
|
|
19
|
+
'appstore': {
|
|
20
|
+
'directory_name': 'ios',
|
|
21
|
+
'sizes': [
|
|
22
|
+
('App store high resolution', '{}-appstore-1024.png', 1024),
|
|
23
|
+
('App store normal resolution', '{}-appstore-512.png', 512),
|
|
24
|
+
# iOS 7
|
|
25
|
+
('iPhone (iOS 7)', '{}-60.png', 120),
|
|
26
|
+
('iPhone @2 (iOS 7)', '{}-60@2x.png', 120),
|
|
27
|
+
('iPad (iOS 7)', '{}-76.png', 76),
|
|
28
|
+
('iPad @2 (iOS 7)', '{}-60@2x.png', 152),
|
|
29
|
+
# iOS 6.1 and earlier
|
|
30
|
+
('iPhone (iOS >= 6.1)', '{}-57.png', 57),
|
|
31
|
+
('iPhone @2 (iOS >= 6.1)', '{}-57@2x.png', 114),
|
|
32
|
+
('iPad (iOS >= 6.1)', '{}-72.png', 72),
|
|
33
|
+
('iPad @2 (iOS >= 6.1)', '{}-72@2x.png', 114),
|
|
34
|
+
# iTunes artwork (ad-hoc)
|
|
35
|
+
('iTunes Artwork (ad-hoc)', 'iTunesArtwork', 512),
|
|
36
|
+
('iTunes Artwork @2 (ad-hoc)', 'iTunesArtwork@2x', 1024),
|
|
37
|
+
]},
|
|
38
|
+
'playstore': {
|
|
39
|
+
'directory_name': 'android',
|
|
40
|
+
'sizes': [
|
|
41
|
+
('Google Play icon', '{}-googleplay-512.png', 512),
|
|
42
|
+
('Launcher icon MDPI', '{}-48.png', 48),
|
|
43
|
+
('Launcher icon HDPI', '{}-72.png', 72),
|
|
44
|
+
('Launcher icon XHDPI', '{}-96.png', 96),
|
|
45
|
+
('Launcher icon XXHDPI', '{}-144.png', 48),
|
|
46
|
+
('Launcher icon XXXHDPI', '{}-192.png', 192),
|
|
47
|
+
]},
|
|
48
|
+
'amazonstore': {
|
|
49
|
+
'directory_name': 'amazon',
|
|
50
|
+
'sizes': [
|
|
51
|
+
('Small icon', '{}-114.png', 114),
|
|
52
|
+
('Large icon', '{}-512.png', 512),
|
|
53
|
+
]}}
|
|
54
|
+
|
|
55
|
+
def run(self):
|
|
56
|
+
parser = ArgumentParser(
|
|
57
|
+
description='Generate icons for various stores')
|
|
58
|
+
parser.add_argument('--dir', type=str, default=None,
|
|
59
|
+
help=('Output directory to generate all the icons,'
|
|
60
|
+
'defaults to the directory of the source icon'))
|
|
61
|
+
parser.add_argument('--force', type=bool, default=False,
|
|
62
|
+
help=('Generate all icons even if the source is not perfect.'))
|
|
63
|
+
parser.add_argument('icon', type=str,
|
|
64
|
+
help='Base icon (must be 1024x1024 or 512x512)')
|
|
65
|
+
|
|
66
|
+
args = parser.parse_args()
|
|
67
|
+
if not exists(args.icon):
|
|
68
|
+
print('Error: No such icon file')
|
|
69
|
+
sys.exit(1)
|
|
70
|
+
|
|
71
|
+
# ensure the destination directory will be set
|
|
72
|
+
if args.dir is None:
|
|
73
|
+
args.dir = dirname(args.icon)
|
|
74
|
+
|
|
75
|
+
# read the source image, and do some quality checks
|
|
76
|
+
base_fn = basename(args.icon).rsplit('.', 1)[0]
|
|
77
|
+
source = Image.open(args.icon)
|
|
78
|
+
self.ensure_quality(source, args.force)
|
|
79
|
+
|
|
80
|
+
for directory_name, sizeinfo in self.iterate():
|
|
81
|
+
description, pattern_fn, size = sizeinfo
|
|
82
|
+
print('Generate {}: {}x{}'.format(description, size, size))
|
|
83
|
+
dest_dir = realpath(join(args.dir, directory_name))
|
|
84
|
+
if not exists(dest_dir):
|
|
85
|
+
makedirs(dest_dir)
|
|
86
|
+
icon_fn = join(dest_dir, pattern_fn.format('Icon'))
|
|
87
|
+
self.convert_to(source, icon_fn, size)
|
|
88
|
+
|
|
89
|
+
def convert_to(self, source, icon_fn, size):
|
|
90
|
+
dest = source.resize((size, size))
|
|
91
|
+
dest.save(icon_fn, 'png')
|
|
92
|
+
|
|
93
|
+
def ensure_quality(self, image, force=False):
|
|
94
|
+
messages = []
|
|
95
|
+
w, h = image.size
|
|
96
|
+
if w != h:
|
|
97
|
+
messages.append('Width and height should be the same')
|
|
98
|
+
if w not in (512, 1024):
|
|
99
|
+
messages.append(
|
|
100
|
+
'Source image is recommended to be 1024 (512 minimum)')
|
|
101
|
+
if not messages:
|
|
102
|
+
return
|
|
103
|
+
|
|
104
|
+
print('Quality check failed')
|
|
105
|
+
for message in messages:
|
|
106
|
+
print('- {}'.format(message))
|
|
107
|
+
if not force:
|
|
108
|
+
sys.exit(1)
|
|
109
|
+
|
|
110
|
+
def iterate(self):
|
|
111
|
+
for store, infos in Converter.converters.items():
|
|
112
|
+
for size in infos['sizes']:
|
|
113
|
+
yield infos['directory_name'], size
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
if __name__ == '__main__':
|
|
117
|
+
Converter().run()
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Common GLES Subset Extraction Script
|
|
3
|
+
====================================
|
|
4
|
+
|
|
5
|
+
In Kivy, our goal is to use OpenGL ES 2.0 (GLES2) for all drawing on all
|
|
6
|
+
platforms. The problem is that GLES2 is not a proper subset of any OpenGL
|
|
7
|
+
Desktop (GL) version prior to version 4.1.
|
|
8
|
+
However, to keep all our drawing cross-platform compatible, we're
|
|
9
|
+
restricting the Kivy drawing core to a real subset of GLES2 that is
|
|
10
|
+
available on all platforms.
|
|
11
|
+
|
|
12
|
+
This script therefore parses the GL and GL Extension (GLEXT) headers and
|
|
13
|
+
compares them with the GLES2 header. It then generates a header that only
|
|
14
|
+
contains symbols that are common to GLES2 and at least either GL or GLEXT.
|
|
15
|
+
However, since GLES2 doesn't support double values, we also need to do some
|
|
16
|
+
renaming, because functions in GL that took doubles as arguments now take
|
|
17
|
+
floats in GLES2, with their function name being suffixed with 'f'.
|
|
18
|
+
|
|
19
|
+
Furthermore, sometimes the pure symbol name doesn't match because there
|
|
20
|
+
might be an _EXT or _ARB or something akin to that at the end of a symbol
|
|
21
|
+
name. In that case, we take the symbol from the original header and add
|
|
22
|
+
a #define directive to redirect to that symbol from the symbol name without
|
|
23
|
+
extension.
|
|
24
|
+
'''
|
|
25
|
+
|
|
26
|
+
from __future__ import print_function
|
|
27
|
+
|
|
28
|
+
gl = open("/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/" +
|
|
29
|
+
"OpenGL.framework/Versions/A/Headers/gl.h", 'r')
|
|
30
|
+
glext = open("/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/" +
|
|
31
|
+
"OpenGL.framework/Versions/A/Headers/glext.h", 'r')
|
|
32
|
+
gles = open("gl2.h", 'r')
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def add_defines_to_set(header):
|
|
36
|
+
symbols = []
|
|
37
|
+
lineno = 0
|
|
38
|
+
for line in header:
|
|
39
|
+
symbol = None
|
|
40
|
+
hexcode = None
|
|
41
|
+
lineno += 1
|
|
42
|
+
line = line.strip()
|
|
43
|
+
try:
|
|
44
|
+
elements = line.split()
|
|
45
|
+
if line.startswith("#define"):
|
|
46
|
+
symbol = elements[1]
|
|
47
|
+
for element in elements:
|
|
48
|
+
if element.startswith("0x"):
|
|
49
|
+
hexcode = element
|
|
50
|
+
elif line.startswith("typedef"):
|
|
51
|
+
symbol = elements[-1]
|
|
52
|
+
else:
|
|
53
|
+
for element in elements:
|
|
54
|
+
if element.startswith("gl"):
|
|
55
|
+
symbol = element
|
|
56
|
+
if symbol:
|
|
57
|
+
symbols.append((symbol, lineno, line, hexcode))
|
|
58
|
+
except Exception as e:
|
|
59
|
+
print('error:', lineno, ':', line)
|
|
60
|
+
print(e)
|
|
61
|
+
|
|
62
|
+
return symbols
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def extract_common_symbols(symbols1, symbols2, already_extracted):
|
|
66
|
+
for symbol1, lineno1, line1, hexcode1 in symbols1:
|
|
67
|
+
for symbol2, lineno2, line2, hexcode2 in symbols2:
|
|
68
|
+
if symbol1 in already_extracted or symbol2 in already_extracted:
|
|
69
|
+
continue
|
|
70
|
+
if symbol1 == symbol2 + 'f':
|
|
71
|
+
# There is no `double` type in GLES; Functions that were using
|
|
72
|
+
# a double were renamed with the suffix 'f'.
|
|
73
|
+
print("// Different Name; Redefine")
|
|
74
|
+
print(line2)
|
|
75
|
+
print("#define %s %s" % (symbol1, symbol2))
|
|
76
|
+
elif symbol1 == symbol2:
|
|
77
|
+
already_extracted.append(symbol1)
|
|
78
|
+
print(line1)
|
|
79
|
+
if symbol1 == 'GLclampf;':
|
|
80
|
+
# See explanation about doubles on GLES above.
|
|
81
|
+
print('typedef GLclampf GLclampd;')
|
|
82
|
+
elif hexcode1 and hexcode2 and hexcode1 == hexcode2:
|
|
83
|
+
already_extracted.append(symbol1)
|
|
84
|
+
already_extracted.append(symbol2)
|
|
85
|
+
print("// Different Name; Redefine")
|
|
86
|
+
print(line2)
|
|
87
|
+
print("#define %s %s" % (symbol1, symbol2))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# Generate ------------------------------------------------
|
|
91
|
+
# pipe to kivy/kivy/graphics/common_subset.h
|
|
92
|
+
|
|
93
|
+
gl_symbols = add_defines_to_set(gl)
|
|
94
|
+
glext_symbols = add_defines_to_set(glext)
|
|
95
|
+
gles_symbols = add_defines_to_set(gles)
|
|
96
|
+
|
|
97
|
+
print('// GLES 2.0 Header file, generated for Kivy')
|
|
98
|
+
print('// Check kivy/kivy/tools/gles_compat/subset_gles.py')
|
|
99
|
+
print('#pragma once')
|
|
100
|
+
print('#include "gl2platform.h"')
|
|
101
|
+
print('#ifdef __cplusplus')
|
|
102
|
+
print('extern "C" {')
|
|
103
|
+
print('#endif')
|
|
104
|
+
|
|
105
|
+
# Don't add the same symbol more than once
|
|
106
|
+
already_extracted = []
|
|
107
|
+
|
|
108
|
+
print('\n// Subset common to GLES and GL: ===================================')
|
|
109
|
+
extract_common_symbols(gles_symbols, gl_symbols, already_extracted)
|
|
110
|
+
|
|
111
|
+
print('\n// Subset common to GLES and GLEXT: ================================')
|
|
112
|
+
extract_common_symbols(gles_symbols, glext_symbols, already_extracted)
|
|
113
|
+
|
|
114
|
+
print()
|
|
115
|
+
print('// What follows was manually extracted from the GLES2 headers because')
|
|
116
|
+
print('// it was not present in any other header.', end=' ')
|
|
117
|
+
print('''
|
|
118
|
+
#define GL_SHADER_BINARY_FORMATS 0x8DF8
|
|
119
|
+
#define GL_RGB565 0x8D62
|
|
120
|
+
''')
|
|
121
|
+
|
|
122
|
+
print('#ifdef __cplusplus')
|
|
123
|
+
print('}')
|
|
124
|
+
print('#endif')
|
|
125
|
+
print('\n')
|
kivy/tools/kviewer.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
'''
|
|
3
|
+
KViewer
|
|
4
|
+
=======
|
|
5
|
+
|
|
6
|
+
KViewer, for KV-Viewer, is a simple tool allowing you to dynamically display
|
|
7
|
+
a KV file, taking its changes into account (thanks to watchdog). The
|
|
8
|
+
idea is to facilitate design using the KV language. It's somewhat related to
|
|
9
|
+
the KivyCatalog demo, except it uses an on-disc file, allowing the user to use
|
|
10
|
+
any editor.
|
|
11
|
+
|
|
12
|
+
You can use the script as follows::
|
|
13
|
+
|
|
14
|
+
python kviewer.py ./test.kv
|
|
15
|
+
|
|
16
|
+
This will display the test.kv and automatically update the display when the
|
|
17
|
+
file changes.
|
|
18
|
+
|
|
19
|
+
.. note: This scripts uses watchdog to listen for file changes. To install
|
|
20
|
+
watchdog::
|
|
21
|
+
|
|
22
|
+
pip install watchdog
|
|
23
|
+
|
|
24
|
+
'''
|
|
25
|
+
|
|
26
|
+
from sys import argv
|
|
27
|
+
from kivy.lang import Builder
|
|
28
|
+
from kivy.app import App
|
|
29
|
+
from kivy.core.window import Window
|
|
30
|
+
from kivy.clock import Clock, mainthread
|
|
31
|
+
from kivy.uix.label import Label
|
|
32
|
+
|
|
33
|
+
from watchdog.observers import Observer
|
|
34
|
+
from watchdog.events import FileSystemEventHandler
|
|
35
|
+
from os.path import dirname, basename, join
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if len(argv) != 2:
|
|
39
|
+
print('usage: %s filename.kv' % argv[0])
|
|
40
|
+
exit(1)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
PATH = dirname(argv[1])
|
|
44
|
+
TARGET = basename(argv[1])
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class KvHandler(FileSystemEventHandler):
|
|
48
|
+
def __init__(self, callback, target, **kwargs):
|
|
49
|
+
super(KvHandler, self).__init__(**kwargs)
|
|
50
|
+
self.callback = callback
|
|
51
|
+
self.target = target
|
|
52
|
+
|
|
53
|
+
def on_any_event(self, event):
|
|
54
|
+
if basename(event.src_path) == self.target:
|
|
55
|
+
self.callback()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class KvViewerApp(App):
|
|
59
|
+
def build(self):
|
|
60
|
+
o = Observer()
|
|
61
|
+
o.schedule(KvHandler(self.update, TARGET), PATH)
|
|
62
|
+
o.start()
|
|
63
|
+
Clock.schedule_once(self.update, 1)
|
|
64
|
+
return super(KvViewerApp, self).build()
|
|
65
|
+
|
|
66
|
+
@mainthread
|
|
67
|
+
def update(self, *args):
|
|
68
|
+
Builder.unload_file(join(PATH, TARGET))
|
|
69
|
+
for w in Window.children[:]:
|
|
70
|
+
Window.remove_widget(w)
|
|
71
|
+
try:
|
|
72
|
+
Window.add_widget(Builder.load_file(join(PATH, TARGET)))
|
|
73
|
+
except Exception as e:
|
|
74
|
+
Window.add_widget(Label(text=(
|
|
75
|
+
e.message if getattr(e, r'message', None) else str(e)
|
|
76
|
+
)))
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
if __name__ == '__main__':
|
|
80
|
+
KvViewerApp().run()
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Packaging
|
|
3
|
+
=========
|
|
4
|
+
|
|
5
|
+
This module contains `PyInstaller <http://www.pyinstaller.org/>`_ hooks in
|
|
6
|
+
order to assist in the process of building binary packages. PyInstaller allows
|
|
7
|
+
you to produce stand-alone, self-contained executables of your Kivy app for
|
|
8
|
+
Windows, Linux and Mac.
|
|
9
|
+
|
|
10
|
+
For more information, please see the `PyInstaller website
|
|
11
|
+
<http://www.pyinstaller.org/>`_
|
|
12
|
+
'''
|