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.
Files changed (624) hide show
  1. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/main.py +77 -0
  2. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/monkey.obj +7966 -0
  3. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/objloader.py +147 -0
  4. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/simple.glsl +47 -0
  5. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/editor.kv +72 -0
  6. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/main.py +64 -0
  7. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/android.txt +3 -0
  8. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/compass.kv +25 -0
  9. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/main.py +77 -0
  10. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/needle.png +0 -0
  11. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/rose.png +0 -0
  12. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/android.txt +3 -0
  13. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/main.py +80 -0
  14. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/shadow32.png +0 -0
  15. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/takepicture.kv +40 -0
  16. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/animation/animate.py +42 -0
  17. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite.py +152 -0
  18. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite_data/testkvdir.kv +4 -0
  19. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_build.py +24 -0
  20. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_config.py +49 -0
  21. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv.py +25 -0
  22. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv_in_template1.py +27 -0
  23. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/template1/test.kv +4 -0
  24. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/test.kv +4 -0
  25. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/testkvfile.kv +4 -0
  26. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_advanced.py +90 -0
  27. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_basic.py +59 -0
  28. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_advanced.py +93 -0
  29. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_basic.py +58 -0
  30. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12908_sweet_trip_mm_clap_hi.wav +0 -0
  31. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12909_sweet_trip_mm_clap_lo.wav +0 -0
  32. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12910_sweet_trip_mm_clap_mid.wav +0 -0
  33. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12911_sweet_trip_mm_hat_cl.wav +0 -0
  34. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12913_sweet_trip_mm_kick_hi.wav +0 -0
  35. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12914_sweet_trip_mm_kick_lo.wav +0 -0
  36. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12915_sweet_trip_mm_kick_mid.wav +0 -0
  37. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12916_sweet_trip_mm_kwik_mod_01.wav +0 -0
  38. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12917_sweet_trip_mm_kwik_mod_02.wav +0 -0
  39. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12918_sweet_trip_mm_kwik_mod_03.wav +0 -0
  40. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12919_sweet_trip_mm_kwik_mod_04.wav +0 -0
  41. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12920_sweet_trip_mm_kwik_mod_05.wav +0 -0
  42. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12921_sweet_trip_mm_kwik_mod_06.wav +0 -0
  43. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12922_sweet_trip_mm_kwik_mod_07.wav +0 -0
  44. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12923_sweet_trip_mm_metal_clave.wav +0 -0
  45. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12925_sweet_trip_mm_sweep_x.wav +0 -0
  46. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12926_sweet_trip_mm_sweep_y.wav +0 -0
  47. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12927_sweet_trip_mm_sweep_z.wav +0 -0
  48. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/audio.kv +59 -0
  49. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/main.py +81 -0
  50. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/pitch.py +42 -0
  51. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/camera/main.py +59 -0
  52. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/bezier.py +105 -0
  53. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/canvas_stress.py +72 -0
  54. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/circle.py +84 -0
  55. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/fbo_canvas.py +91 -0
  56. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/kiwi.jpg +0 -0
  57. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines.py +296 -0
  58. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines_extended.py +183 -0
  59. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh.py +57 -0
  60. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh_manipulation.py +101 -0
  61. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture1.png +0 -0
  62. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture2.png +0 -0
  63. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/multitexture.py +110 -0
  64. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/repeat_texture.py +65 -0
  65. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rotation.py +35 -0
  66. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rounded_rectangle.py +153 -0
  67. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/scale.py +37 -0
  68. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/stencil_canvas.py +85 -0
  69. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/tesselate.py +146 -0
  70. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture.py +143 -0
  71. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture_example_image.png +0 -0
  72. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/1.kv +28 -0
  73. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/2.kv +28 -0
  74. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/3.kv +28 -0
  75. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/root.kv +32 -0
  76. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/main.py +63 -0
  77. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_image.py +25 -0
  78. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_video.py +31 -0
  79. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/camera_puzzle.py +98 -0
  80. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/AnchorLayoutContainer.kv +15 -0
  81. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/BoxLayoutContainer.kv +14 -0
  82. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ButtonContainer.kv +27 -0
  83. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/CheckBoxContainer.kv +28 -0
  84. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FileChooserContainer.kv +19 -0
  85. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FloatLayoutContainer.kv +16 -0
  86. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/GridLayoutContainer.kv +20 -0
  87. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/LabelContainer.kv +62 -0
  88. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/MediaContainer.kv +9 -0
  89. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PlaygroundContainer.kv +4 -0
  90. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PopupContainer.kv +39 -0
  91. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ProgressBarContainer.kv +17 -0
  92. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/RestContainer.kv +5 -0
  93. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ScatterContainer.kv +16 -0
  94. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/SelectorsContainer.kv +10 -0
  95. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/StackLayoutContainer.kv +25 -0
  96. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/TextContainer.kv +20 -0
  97. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/kivycatalog.kv +144 -0
  98. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/main.py +192 -0
  99. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.kv +117 -0
  100. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.py +180 -0
  101. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/helpers.py +30 -0
  102. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.kv +164 -0
  103. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.py +276 -0
  104. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/main.py +144 -0
  105. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/multistroke.kv +101 -0
  106. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.kv +110 -0
  107. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.py +97 -0
  108. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/android.txt +3 -0
  109. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Bubbles.jpg +0 -0
  110. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Ill1.jpg +0 -0
  111. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Wall.jpg +0 -0
  112. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/faust_github.jpg +0 -0
  113. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/main.py +73 -0
  114. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/pictures.kv +57 -0
  115. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/shadow32.png +0 -0
  116. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/main.py +147 -0
  117. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/shadereditor.kv +39 -0
  118. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/README.txt +11 -0
  119. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/android.txt +3 -0
  120. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/background.png +0 -0
  121. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/faust_github.jpg +0 -0
  122. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/README +4 -0
  123. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/bug.png +0 -0
  124. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-left.png +0 -0
  125. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-right.png +0 -0
  126. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/accordions.kv +39 -0
  127. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/bubbles.kv +33 -0
  128. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/buttons.kv +26 -0
  129. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/carousel.kv +51 -0
  130. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/checkboxes.kv +33 -0
  131. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/codeinput.kv +9 -0
  132. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/dropdown.kv +40 -0
  133. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/filechoosers.kv +24 -0
  134. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/popups.kv +17 -0
  135. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/progressbar.kv +15 -0
  136. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/rstdocument.kv +24 -0
  137. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/scatter.kv +14 -0
  138. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/screenmanager.kv +46 -0
  139. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/sliders.kv +55 -0
  140. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/spinner.kv +11 -0
  141. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/splitter.kv +13 -0
  142. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/switches.kv +39 -0
  143. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/tabbedpanel + layouts.kv +69 -0
  144. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/textinputs.kv +48 -0
  145. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/togglebutton.kv +39 -0
  146. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/main.py +243 -0
  147. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/showcase.kv +100 -0
  148. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/README.txt +12 -0
  149. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/android.txt +3 -0
  150. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/icon.png +0 -0
  151. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/main.py +170 -0
  152. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/particle.png +0 -0
  153. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/touchtracer.kv +29 -0
  154. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_client_app.py +82 -0
  155. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_server_app.py +49 -0
  156. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/twistd_app.py +66 -0
  157. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/gesture_board.py +95 -0
  158. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/my_gestures.py +90 -0
  159. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/controller.kv +16 -0
  160. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/main.py +29 -0
  161. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/1_skeleton.py +15 -0
  162. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/2_print_touch.py +16 -0
  163. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/3_draw_ellipse.py +22 -0
  164. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/4_draw_line.py +26 -0
  165. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/5_random_colors.py +28 -0
  166. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/6_button.py +38 -0
  167. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/quickstart/main.py +15 -0
  168. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/button.kv +9 -0
  169. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/layout.kv +6 -0
  170. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/main.py +19 -0
  171. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/test.kv +5 -0
  172. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/android.txt +3 -0
  173. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/main.py +226 -0
  174. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/numeric.json +38 -0
  175. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/README.txt +13 -0
  176. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/kinectviewer.py +283 -0
  177. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_button.kv +9 -0
  178. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_camera.kv +25 -0
  179. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_fbo.kv +11 -0
  180. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_layout.kv +23 -0
  181. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_logo.kv +36 -0
  182. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_scatter.kv +6 -0
  183. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_stencil.kv +27 -0
  184. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_video.kv +42 -0
  185. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/builder_template.py +28 -0
  186. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/id_in_kv.py +20 -0
  187. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/test.kv +11 -0
  188. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/kv_and_py.py +34 -0
  189. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/test.kv +11 -0
  190. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kivy.jpg +0 -0
  191. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kvrun.py +38 -0
  192. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/clipboard.py +63 -0
  193. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/custom_titlebar.py +56 -0
  194. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/imagesave.py +14 -0
  195. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/joystick.py +83 -0
  196. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/multiple_dropfile.py +51 -0
  197. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/on_textedit_event.py +104 -0
  198. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/opacitywindow.py +28 -0
  199. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapecollisions.py +397 -0
  200. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapedwindow.py +98 -0
  201. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/two_panes.py +47 -0
  202. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/urlrequest.py +128 -0
  203. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/android.txt +3 -0
  204. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/main.py +122 -0
  205. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.kv +9 -0
  206. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.py +86 -0
  207. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.kv +91 -0
  208. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.py +102 -0
  209. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.kv +29 -0
  210. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.py +193 -0
  211. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/tex3.jpg +0 -0
  212. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/benchmark.py +19 -0
  213. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/cloud.svg +25 -0
  214. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main-smaa.py +155 -0
  215. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main.py +50 -0
  216. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/music.svg +68 -0
  217. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/rotated.svg +23 -0
  218. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/ship.svg +181 -0
  219. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/sun.svg +35 -0
  220. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/tiger.svg +813 -0
  221. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/text/pango_demo.py +296 -0
  222. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/data/icon.png +0 -0
  223. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/main.py +163 -0
  224. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/note.kv +154 -0
  225. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/main.py +82 -0
  226. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/pong.kv +53 -0
  227. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/main.py +15 -0
  228. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/pong.kv +2 -0
  229. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/main.py +15 -0
  230. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/pong.kv +21 -0
  231. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/main.py +26 -0
  232. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/pong.kv +31 -0
  233. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/main.py +48 -0
  234. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/pong.kv +34 -0
  235. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/main.py +75 -0
  236. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/pong.kv +53 -0
  237. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/accordion_1.py +17 -0
  238. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/actionbar.py +32 -0
  239. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/asyncimage.py +35 -0
  240. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/boxlayout_poshint.py +54 -0
  241. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/bubble_test.py +63 -0
  242. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/camera.py +33 -0
  243. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/carousel_buttons.py +50 -0
  244. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.mpg +0 -0
  245. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.png +0 -0
  246. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinput.py +225 -0
  247. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinputtest.kv +53 -0
  248. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorpicker.py +234 -0
  249. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorusage.py +62 -0
  250. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/compound_selection.py +83 -0
  251. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/customcollide.py +82 -0
  252. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget.py +193 -0
  253. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget2.py +47 -0
  254. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget3_advanced.py +62 -0
  255. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/fbowidget.py +111 -0
  256. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/focus_behavior.py +98 -0
  257. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/image_mipmap.py +31 -0
  258. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/keyboardlistener.py +42 -0
  259. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_mipmap.py +28 -0
  260. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_sizing.py +193 -0
  261. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_text_size.py +49 -0
  262. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_with_markup.py +21 -0
  263. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/lang_dynamic_classes.py +18 -0
  264. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/pagelayout.py +64 -0
  265. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/popup_with_kv.py +35 -0
  266. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/basic_data.py +124 -0
  267. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/infinite_scrolling.py +143 -0
  268. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/key_viewclass.py +149 -0
  269. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/messenger.py +196 -0
  270. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/pull_to_refresh.py +95 -0
  271. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/rv_animate_items.py +109 -0
  272. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/rstexample.py +128 -0
  273. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.kv +53 -0
  274. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.py +16 -0
  275. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/screenmanager.py +106 -0
  276. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.kv +16 -0
  277. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.py +40 -0
  278. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/android.txt +3 -0
  279. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/bird.zip +0 -0
  280. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white.png +0 -0
  281. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white_animated.zip +0 -0
  282. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/cube.zip +0 -0
  283. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.png +0 -0
  284. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.zip +0 -0
  285. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/simple_cv_joint_animated.gif +0 -0
  286. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.kv +63 -0
  287. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.py +150 -0
  288. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/__init__.py +7 -0
  289. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/custom_button.py +98 -0
  290. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/settings.py +93 -0
  291. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/shorten_text.py +80 -0
  292. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/spinner.py +17 -0
  293. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/splitter.py +74 -0
  294. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbed_panel_showcase.py +316 -0
  295. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbedpanel.py +50 -0
  296. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.kv +49 -0
  297. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.py +48 -0
  298. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textinput.py +59 -0
  299. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/unicode_textinput.py +244 -0
  300. Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/videoplayer.py +26 -0
  301. Kivy_examples-2.3.1.dev0.dist-info/AUTHORS +66 -0
  302. Kivy_examples-2.3.1.dev0.dist-info/LICENSE +21 -0
  303. Kivy_examples-2.3.1.dev0.dist-info/METADATA +382 -0
  304. Kivy_examples-2.3.1.dev0.dist-info/RECORD +624 -0
  305. Kivy_examples-2.3.1.dev0.dist-info/WHEEL +5 -0
  306. Kivy_examples-2.3.1.dev0.dist-info/dependency_links.txt +1 -0
  307. Kivy_examples-2.3.1.dev0.dist-info/top_level.txt +1 -0
  308. kivy/__init__.py +519 -0
  309. kivy/_version.py +18 -0
  310. kivy/animation.py +831 -0
  311. kivy/app.py +1213 -0
  312. kivy/atlas.py +456 -0
  313. kivy/base.py +617 -0
  314. kivy/cache.py +262 -0
  315. kivy/clock.py +1172 -0
  316. kivy/compat.py +82 -0
  317. kivy/config.py +1004 -0
  318. kivy/context.py +102 -0
  319. kivy/core/__init__.py +247 -0
  320. kivy/core/audio/__init__.py +223 -0
  321. kivy/core/audio/audio_android.py +104 -0
  322. kivy/core/audio/audio_avplayer.py +82 -0
  323. kivy/core/audio/audio_ffpyplayer.py +185 -0
  324. kivy/core/audio/audio_gstplayer.py +101 -0
  325. kivy/core/audio/audio_pygame.py +127 -0
  326. kivy/core/camera/__init__.py +151 -0
  327. kivy/core/camera/camera_android.py +206 -0
  328. kivy/core/camera/camera_gi.py +170 -0
  329. kivy/core/camera/camera_opencv.py +163 -0
  330. kivy/core/camera/camera_picamera.py +96 -0
  331. kivy/core/clipboard/__init__.py +157 -0
  332. kivy/core/clipboard/_clipboard_ext.py +36 -0
  333. kivy/core/clipboard/clipboard_android.py +91 -0
  334. kivy/core/clipboard/clipboard_dbusklipper.py +41 -0
  335. kivy/core/clipboard/clipboard_dummy.py +26 -0
  336. kivy/core/clipboard/clipboard_gtk3.py +47 -0
  337. kivy/core/clipboard/clipboard_nspaste.py +44 -0
  338. kivy/core/clipboard/clipboard_pygame.py +67 -0
  339. kivy/core/clipboard/clipboard_sdl2.py +36 -0
  340. kivy/core/clipboard/clipboard_winctypes.py +107 -0
  341. kivy/core/clipboard/clipboard_xclip.py +29 -0
  342. kivy/core/clipboard/clipboard_xsel.py +26 -0
  343. kivy/core/gl/__init__.py +90 -0
  344. kivy/core/image/__init__.py +996 -0
  345. kivy/core/image/img_dds.py +40 -0
  346. kivy/core/image/img_ffpyplayer.py +87 -0
  347. kivy/core/image/img_pil.py +123 -0
  348. kivy/core/image/img_pygame.py +119 -0
  349. kivy/core/image/img_sdl2.py +66 -0
  350. kivy/core/image/img_tex.py +58 -0
  351. kivy/core/spelling/__init__.py +135 -0
  352. kivy/core/spelling/spelling_enchant.py +50 -0
  353. kivy/core/spelling/spelling_osxappkit.py +64 -0
  354. kivy/core/text/__init__.py +1090 -0
  355. kivy/core/text/markup.py +893 -0
  356. kivy/core/text/text_pango.py +145 -0
  357. kivy/core/text/text_pil.py +84 -0
  358. kivy/core/text/text_pygame.py +117 -0
  359. kivy/core/text/text_sdl2.py +50 -0
  360. kivy/core/video/__init__.py +219 -0
  361. kivy/core/video/video_ffmpeg.py +106 -0
  362. kivy/core/video/video_ffpyplayer.py +449 -0
  363. kivy/core/video/video_gstplayer.py +140 -0
  364. kivy/core/video/video_null.py +12 -0
  365. kivy/core/window/__init__.py +2515 -0
  366. kivy/core/window/window_egl_rpi.py +86 -0
  367. kivy/core/window/window_pygame.py +441 -0
  368. kivy/core/window/window_sdl2.py +999 -0
  369. kivy/deps/__init__.py +6 -0
  370. kivy/effects/__init__.py +23 -0
  371. kivy/effects/dampedscroll.py +114 -0
  372. kivy/effects/kinetic.py +193 -0
  373. kivy/effects/opacityscroll.py +27 -0
  374. kivy/effects/scroll.py +126 -0
  375. kivy/event.py +12 -0
  376. kivy/eventmanager/__init__.py +185 -0
  377. kivy/extras/__init__.py +0 -0
  378. kivy/extras/highlight.py +52 -0
  379. kivy/factory.py +190 -0
  380. kivy/factory_registers.py +201 -0
  381. kivy/garden/__init__.py +186 -0
  382. kivy/geometry.py +121 -0
  383. kivy/gesture.py +424 -0
  384. kivy/graphics/__init__.py +126 -0
  385. kivy/graphics/cgl_backend/__init__.py +0 -0
  386. kivy/input/__init__.py +39 -0
  387. kivy/input/factory.py +35 -0
  388. kivy/input/motionevent.py +587 -0
  389. kivy/input/postproc/__init__.py +27 -0
  390. kivy/input/postproc/calibration.py +200 -0
  391. kivy/input/postproc/dejitter.py +74 -0
  392. kivy/input/postproc/doubletap.py +101 -0
  393. kivy/input/postproc/ignorelist.py +47 -0
  394. kivy/input/postproc/retaintouch.py +93 -0
  395. kivy/input/postproc/tripletap.py +106 -0
  396. kivy/input/provider.py +40 -0
  397. kivy/input/providers/__init__.py +68 -0
  398. kivy/input/providers/androidjoystick.py +117 -0
  399. kivy/input/providers/hidinput.py +778 -0
  400. kivy/input/providers/leapfinger.py +113 -0
  401. kivy/input/providers/linuxwacom.py +396 -0
  402. kivy/input/providers/mactouch.py +220 -0
  403. kivy/input/providers/mouse.py +424 -0
  404. kivy/input/providers/mtdev.py +380 -0
  405. kivy/input/providers/probesysfs.py +254 -0
  406. kivy/input/providers/tuio.py +326 -0
  407. kivy/input/providers/wm_common.py +162 -0
  408. kivy/input/providers/wm_pen.py +121 -0
  409. kivy/input/providers/wm_touch.py +157 -0
  410. kivy/input/recorder.py +335 -0
  411. kivy/input/shape.py +27 -0
  412. kivy/interactive.py +335 -0
  413. kivy/lang/__init__.py +883 -0
  414. kivy/lang/builder.py +1004 -0
  415. kivy/lang/parser.py +822 -0
  416. kivy/lib/__init__.py +21 -0
  417. kivy/lib/ddsfile.py +419 -0
  418. kivy/lib/gstplayer/__init__.py +27 -0
  419. kivy/lib/mtdev.py +254 -0
  420. kivy/lib/vidcore_lite/__init__.py +0 -0
  421. kivy/loader.py +579 -0
  422. kivy/logger.py +646 -0
  423. kivy/metrics.py +421 -0
  424. kivy/modules/__init__.py +300 -0
  425. kivy/modules/_webdebugger.py +200 -0
  426. kivy/modules/console.py +1059 -0
  427. kivy/modules/cursor.py +75 -0
  428. kivy/modules/inspector.py +755 -0
  429. kivy/modules/joycursor.py +299 -0
  430. kivy/modules/keybinding.py +64 -0
  431. kivy/modules/monitor.py +90 -0
  432. kivy/modules/recorder.py +94 -0
  433. kivy/modules/screen.py +183 -0
  434. kivy/modules/showborder.py +33 -0
  435. kivy/modules/touchring.py +97 -0
  436. kivy/modules/webdebugger.py +30 -0
  437. kivy/multistroke.py +1477 -0
  438. kivy/network/__init__.py +7 -0
  439. kivy/network/urlrequest.py +794 -0
  440. kivy/parser.py +154 -0
  441. kivy/resources.py +102 -0
  442. kivy/storage/__init__.py +405 -0
  443. kivy/storage/dictstore.py +98 -0
  444. kivy/storage/jsonstore.py +92 -0
  445. kivy/storage/redisstore.py +103 -0
  446. kivy/support.py +267 -0
  447. kivy/tests/__init__.py +11 -0
  448. kivy/tests/async_common.py +568 -0
  449. kivy/tests/common.py +524 -0
  450. kivy/tests/conftest.py +33 -0
  451. kivy/tests/fixtures.py +169 -0
  452. kivy/tests/perf_test_textinput.py +195 -0
  453. kivy/tests/pyinstaller/simple_widget/main.py +12 -0
  454. kivy/tests/pyinstaller/simple_widget/project/__init__.py +0 -0
  455. kivy/tests/pyinstaller/simple_widget/project/widget.py +12 -0
  456. kivy/tests/pyinstaller/test_pyinstaller.py +115 -0
  457. kivy/tests/pyinstaller/video_widget/main.py +6 -0
  458. kivy/tests/pyinstaller/video_widget/project/__init__.py +38 -0
  459. kivy/tests/test_animations.py +415 -0
  460. kivy/tests/test_app.py +216 -0
  461. kivy/tests/test_audio.py +69 -0
  462. kivy/tests/test_benchmark.py +292 -0
  463. kivy/tests/test_clipboard.py +48 -0
  464. kivy/tests/test_clock.py +292 -0
  465. kivy/tests/test_compat.py +6 -0
  466. kivy/tests/test_config.py +35 -0
  467. kivy/tests/test_coverage.py +83 -0
  468. kivy/tests/test_doc_gallery.py +38 -0
  469. kivy/tests/test_environ_cli.py +50 -0
  470. kivy/tests/test_fbo_py2py3.py +74 -0
  471. kivy/tests/test_filechooser.py +11 -0
  472. kivy/tests/test_filechooser_unicode.py +82 -0
  473. kivy/tests/test_fonts.py +42 -0
  474. kivy/tests/test_garden.py +23 -0
  475. kivy/tests/test_graphics.py +1149 -0
  476. kivy/tests/test_graphics_svg.py +84 -0
  477. kivy/tests/test_image.py +74 -0
  478. kivy/tests/test_imageloader.py +485 -0
  479. kivy/tests/test_invalid_lang.py +42 -0
  480. kivy/tests/test_issues/test_6315.py +55 -0
  481. kivy/tests/test_issues/test_issue_1084.py +47 -0
  482. kivy/tests/test_issues/test_issue_1091.py +19 -0
  483. kivy/tests/test_issues/test_issue_599.py +21 -0
  484. kivy/tests/test_issues/test_issue_609.py +19 -0
  485. kivy/tests/test_issues/test_issue_6909.py +28 -0
  486. kivy/tests/test_issues/test_issue_883.py +12 -0
  487. kivy/tests/test_kivy_init.py +30 -0
  488. kivy/tests/test_knspace.py +247 -0
  489. kivy/tests/test_lang.py +431 -0
  490. kivy/tests/test_lang_complex.py +87 -0
  491. kivy/tests/test_lang_pre_process_and_post_process.py +394 -0
  492. kivy/tests/test_logger.py +516 -0
  493. kivy/tests/test_metrics.py +30 -0
  494. kivy/tests/test_module_inspector.py +382 -0
  495. kivy/tests/test_motion_event.py +44 -0
  496. kivy/tests/test_mouse_hover_event.py +249 -0
  497. kivy/tests/test_mouse_multitouchsim.py +554 -0
  498. kivy/tests/test_multistroke.py +389 -0
  499. kivy/tests/test_properties.py +1332 -0
  500. kivy/tests/test_resources.py +79 -0
  501. kivy/tests/test_rst_replace.py +63 -0
  502. kivy/tests/test_screen.py +38 -0
  503. kivy/tests/test_storage.py +135 -0
  504. kivy/tests/test_uix_actionbar.py +363 -0
  505. kivy/tests/test_uix_anchorlayout.py +79 -0
  506. kivy/tests/test_uix_asyncimage.py +133 -0
  507. kivy/tests/test_uix_boxlayout.py +94 -0
  508. kivy/tests/test_uix_bubble.py +425 -0
  509. kivy/tests/test_uix_carousel.py +93 -0
  510. kivy/tests/test_uix_colorpicker.py +77 -0
  511. kivy/tests/test_uix_dropdown.py +91 -0
  512. kivy/tests/test_uix_gridlayout.py +244 -0
  513. kivy/tests/test_uix_layout.py +16 -0
  514. kivy/tests/test_uix_modal.py +101 -0
  515. kivy/tests/test_uix_recyclegridlayout.py +383 -0
  516. kivy/tests/test_uix_relativelayout.py +30 -0
  517. kivy/tests/test_uix_scrollview.py +358 -0
  518. kivy/tests/test_uix_settings.py +33 -0
  519. kivy/tests/test_uix_slider.py +156 -0
  520. kivy/tests/test_uix_stacklayout.py +120 -0
  521. kivy/tests/test_uix_textinput.py +577 -0
  522. kivy/tests/test_uix_translate_coordinates.py +72 -0
  523. kivy/tests/test_uix_videoplayer.py +112 -0
  524. kivy/tests/test_uix_widget.py +137 -0
  525. kivy/tests/test_urlrequest/test_urlrequest_requests.py +378 -0
  526. kivy/tests/test_urlrequest/test_urlrequest_urllib.py +155 -0
  527. kivy/tests/test_utils.py +237 -0
  528. kivy/tests/test_vector.py +256 -0
  529. kivy/tests/test_video.py +25 -0
  530. kivy/tests/test_weakmethod.py +44 -0
  531. kivy/tests/test_widget.py +127 -0
  532. kivy/tests/test_widget_walk.py +70 -0
  533. kivy/tests/test_window_base.py +60 -0
  534. kivy/tests/test_window_info.py +29 -0
  535. kivy/tests/visual_test_label.py +291 -0
  536. kivy/tools/__init__.py +44 -0
  537. kivy/tools/benchmark.py +286 -0
  538. kivy/tools/changelog_parser.py +120 -0
  539. kivy/tools/coverage.py +135 -0
  540. kivy/tools/gallery.py +323 -0
  541. kivy/tools/generate-icons.py +117 -0
  542. kivy/tools/gles_compat/subset_gles.py +125 -0
  543. kivy/tools/highlight/__init__.py +9 -0
  544. kivy/tools/kviewer.py +80 -0
  545. kivy/tools/packaging/__init__.py +12 -0
  546. kivy/tools/packaging/cython_cfg.py +82 -0
  547. kivy/tools/packaging/factory.py +105 -0
  548. kivy/tools/packaging/pyinstaller_hooks/__init__.py +381 -0
  549. kivy/tools/packaging/pyinstaller_hooks/__main__.py +29 -0
  550. kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py +9 -0
  551. kivy/tools/packaging/pyinstaller_hooks/pyi_rth_kivy.py +17 -0
  552. kivy/tools/pep8checker/pep8.py +2316 -0
  553. kivy/tools/pep8checker/pep8kivy.py +109 -0
  554. kivy/tools/report.py +223 -0
  555. kivy/tools/stub-gl-debug.py +201 -0
  556. kivy/tools/texturecompress.py +233 -0
  557. kivy/uix/__init__.py +56 -0
  558. kivy/uix/accordion.py +484 -0
  559. kivy/uix/actionbar.py +934 -0
  560. kivy/uix/anchorlayout.py +122 -0
  561. kivy/uix/behaviors/__init__.py +95 -0
  562. kivy/uix/behaviors/button.py +212 -0
  563. kivy/uix/behaviors/codenavigation.py +167 -0
  564. kivy/uix/behaviors/compoundselection.py +688 -0
  565. kivy/uix/behaviors/cover.py +160 -0
  566. kivy/uix/behaviors/drag.py +234 -0
  567. kivy/uix/behaviors/emacs.py +140 -0
  568. kivy/uix/behaviors/focus.py +595 -0
  569. kivy/uix/behaviors/knspace.py +590 -0
  570. kivy/uix/behaviors/togglebutton.py +156 -0
  571. kivy/uix/behaviors/touchripple.py +318 -0
  572. kivy/uix/boxlayout.py +331 -0
  573. kivy/uix/bubble.py +576 -0
  574. kivy/uix/button.py +137 -0
  575. kivy/uix/camera.py +118 -0
  576. kivy/uix/carousel.py +695 -0
  577. kivy/uix/checkbox.py +197 -0
  578. kivy/uix/codeinput.py +238 -0
  579. kivy/uix/colorpicker.py +486 -0
  580. kivy/uix/dropdown.py +391 -0
  581. kivy/uix/effectwidget.py +772 -0
  582. kivy/uix/filechooser.py +1134 -0
  583. kivy/uix/floatlayout.py +148 -0
  584. kivy/uix/gesturesurface.py +625 -0
  585. kivy/uix/gridlayout.py +629 -0
  586. kivy/uix/image.py +528 -0
  587. kivy/uix/label.py +1200 -0
  588. kivy/uix/layout.py +322 -0
  589. kivy/uix/modalview.py +339 -0
  590. kivy/uix/pagelayout.py +233 -0
  591. kivy/uix/popup.py +266 -0
  592. kivy/uix/progressbar.py +95 -0
  593. kivy/uix/recycleboxlayout.py +183 -0
  594. kivy/uix/recyclegridlayout.py +255 -0
  595. kivy/uix/recyclelayout.py +446 -0
  596. kivy/uix/recycleview/__init__.py +624 -0
  597. kivy/uix/recycleview/datamodel.py +194 -0
  598. kivy/uix/recycleview/layout.py +253 -0
  599. kivy/uix/recycleview/views.py +423 -0
  600. kivy/uix/relativelayout.py +324 -0
  601. kivy/uix/rst.py +1492 -0
  602. kivy/uix/sandbox.py +198 -0
  603. kivy/uix/scatter.py +645 -0
  604. kivy/uix/scatterlayout.py +93 -0
  605. kivy/uix/screenmanager.py +1275 -0
  606. kivy/uix/scrollview.py +1288 -0
  607. kivy/uix/settings.py +1343 -0
  608. kivy/uix/slider.py +421 -0
  609. kivy/uix/spinner.py +221 -0
  610. kivy/uix/splitter.py +430 -0
  611. kivy/uix/stacklayout.py +331 -0
  612. kivy/uix/stencilview.py +40 -0
  613. kivy/uix/switch.py +122 -0
  614. kivy/uix/tabbedpanel.py +880 -0
  615. kivy/uix/textinput.py +4049 -0
  616. kivy/uix/togglebutton.py +37 -0
  617. kivy/uix/treeview.py +665 -0
  618. kivy/uix/video.py +302 -0
  619. kivy/uix/videoplayer.py +697 -0
  620. kivy/uix/vkeyboard.py +879 -0
  621. kivy/uix/widget.py +1629 -0
  622. kivy/utils.py +550 -0
  623. kivy/vector.py +412 -0
  624. kivy/weakmethod.py +72 -0
kivy/uix/carousel.py ADDED
@@ -0,0 +1,695 @@
1
+ '''
2
+ Carousel
3
+ ========
4
+
5
+ .. image:: images/carousel.gif
6
+ :align: right
7
+
8
+ .. versionadded:: 1.4.0
9
+
10
+ The :class:`Carousel` widget provides the classic mobile-friendly carousel view
11
+ where you can swipe between slides.
12
+ You can add any content to the carousel and have it move horizontally or
13
+ vertically. The carousel can display pages in a sequence or a loop.
14
+
15
+ Example::
16
+
17
+ from kivy.app import App
18
+ from kivy.uix.carousel import Carousel
19
+ from kivy.uix.image import AsyncImage
20
+
21
+
22
+ class CarouselApp(App):
23
+ def build(self):
24
+ carousel = Carousel(direction='right')
25
+ for i in range(10):
26
+ src = "http://placehold.it/480x270.png&text=slide-%d&.png" % i
27
+ image = AsyncImage(source=src, fit_mode="contain")
28
+ carousel.add_widget(image)
29
+ return carousel
30
+
31
+
32
+ CarouselApp().run()
33
+
34
+
35
+ Kv Example::
36
+
37
+ Carousel:
38
+ direction: 'right'
39
+ AsyncImage:
40
+ source: 'http://placehold.it/480x270.png&text=slide-1.png'
41
+ AsyncImage:
42
+ source: 'http://placehold.it/480x270.png&text=slide-2.png'
43
+ AsyncImage:
44
+ source: 'http://placehold.it/480x270.png&text=slide-3.png'
45
+ AsyncImage:
46
+ source: 'http://placehold.it/480x270.png&text=slide-4.png'
47
+
48
+
49
+ .. versionchanged:: 1.5.0
50
+ The carousel now supports active children, like the
51
+ :class:`~kivy.uix.scrollview.ScrollView`. It will detect a swipe gesture
52
+ according to the :attr:`Carousel.scroll_timeout` and
53
+ :attr:`Carousel.scroll_distance` properties.
54
+
55
+ In addition, the slide container is no longer exposed by the API.
56
+ The impacted properties are
57
+ :attr:`Carousel.slides`, :attr:`Carousel.current_slide`,
58
+ :attr:`Carousel.previous_slide` and :attr:`Carousel.next_slide`.
59
+
60
+ '''
61
+
62
+ __all__ = ('Carousel', )
63
+
64
+ from functools import partial
65
+ from kivy.clock import Clock
66
+ from kivy.factory import Factory
67
+ from kivy.animation import Animation
68
+ from kivy.uix.stencilview import StencilView
69
+ from kivy.uix.relativelayout import RelativeLayout
70
+ from kivy.properties import BooleanProperty, OptionProperty, AliasProperty, \
71
+ NumericProperty, ListProperty, ObjectProperty, StringProperty
72
+
73
+
74
+ class Carousel(StencilView):
75
+ '''Carousel class. See module documentation for more information.
76
+ '''
77
+
78
+ slides = ListProperty([])
79
+ '''List of slides inside the Carousel. The slides are the
80
+ widgets added to the Carousel using the :attr:`add_widget` method.
81
+
82
+ :attr:`slides` is a :class:`~kivy.properties.ListProperty` and is
83
+ read-only.
84
+ '''
85
+
86
+ def _get_slides_container(self):
87
+ return [x.parent for x in self.slides]
88
+
89
+ slides_container = AliasProperty(_get_slides_container, bind=('slides',))
90
+
91
+ direction = OptionProperty('right',
92
+ options=('right', 'left', 'top', 'bottom'))
93
+ '''Specifies the direction in which the slides are ordered. This
94
+ corresponds to the direction from which the user swipes to go from one
95
+ slide to the next. It
96
+ can be `right`, `left`, `top`, or `bottom`. For example, with
97
+ the default value of `right`, the second slide is to the right
98
+ of the first and the user would swipe from the right towards the
99
+ left to get to the second slide.
100
+
101
+ :attr:`direction` is an :class:`~kivy.properties.OptionProperty` and
102
+ defaults to 'right'.
103
+ '''
104
+
105
+ min_move = NumericProperty(0.2)
106
+ '''Defines the minimum distance to be covered before the touch is
107
+ considered a swipe gesture and the Carousel content changed.
108
+ This is a expressed as a fraction of the Carousel's width.
109
+ If the movement doesn't reach this minimum value, the movement is
110
+ cancelled and the content is restored to its original position.
111
+
112
+ :attr:`min_move` is a :class:`~kivy.properties.NumericProperty` and
113
+ defaults to 0.2.
114
+ '''
115
+
116
+ anim_move_duration = NumericProperty(0.5)
117
+ '''Defines the duration of the Carousel animation between pages.
118
+
119
+ :attr:`anim_move_duration` is a :class:`~kivy.properties.NumericProperty`
120
+ and defaults to 0.5.
121
+ '''
122
+
123
+ anim_cancel_duration = NumericProperty(0.3)
124
+ '''Defines the duration of the animation when a swipe movement is not
125
+ accepted. This is generally when the user does not make a large enough
126
+ swipe. See :attr:`min_move`.
127
+
128
+ :attr:`anim_cancel_duration` is a :class:`~kivy.properties.NumericProperty`
129
+ and defaults to 0.3.
130
+ '''
131
+
132
+ loop = BooleanProperty(False)
133
+ '''Allow the Carousel to loop infinitely. If True, when the user tries to
134
+ swipe beyond last page, it will return to the first. If False, it will
135
+ remain on the last page.
136
+
137
+ :attr:`loop` is a :class:`~kivy.properties.BooleanProperty` and
138
+ defaults to False.
139
+ '''
140
+
141
+ def _get_index(self):
142
+ if self.slides:
143
+ return self._index % len(self.slides)
144
+ return None
145
+
146
+ def _set_index(self, value):
147
+ if self.slides:
148
+ self._index = value % len(self.slides)
149
+ else:
150
+ self._index = None
151
+
152
+ index = AliasProperty(_get_index, _set_index,
153
+ bind=('_index', 'slides'),
154
+ cache=True)
155
+ '''Get/Set the current slide based on the index.
156
+
157
+ :attr:`index` is an :class:`~kivy.properties.AliasProperty` and defaults
158
+ to 0 (the first item).
159
+ '''
160
+
161
+ def _prev_slide(self):
162
+ slides = self.slides
163
+ len_slides = len(slides)
164
+ index = self.index
165
+ if len_slides < 2: # None, or 1 slide
166
+ return None
167
+ if self.loop and index == 0:
168
+ return slides[-1]
169
+ if index > 0:
170
+ return slides[index - 1]
171
+
172
+ previous_slide = AliasProperty(_prev_slide,
173
+ bind=('slides', 'index', 'loop'),
174
+ cache=True)
175
+ '''The previous slide in the Carousel. It is None if the current slide is
176
+ the first slide in the Carousel. This ordering reflects the order in which
177
+ the slides are added: their presentation varies according to the
178
+ :attr:`direction` property.
179
+
180
+ :attr:`previous_slide` is an :class:`~kivy.properties.AliasProperty`.
181
+
182
+ .. versionchanged:: 1.5.0
183
+ This property no longer exposes the slides container. It returns
184
+ the widget you have added.
185
+ '''
186
+
187
+ def _curr_slide(self):
188
+ if len(self.slides):
189
+ return self.slides[self.index or 0]
190
+
191
+ current_slide = AliasProperty(_curr_slide,
192
+ bind=('slides', 'index'),
193
+ cache=True)
194
+ '''The currently shown slide.
195
+
196
+ :attr:`current_slide` is an :class:`~kivy.properties.AliasProperty`.
197
+
198
+ .. versionchanged:: 1.5.0
199
+ The property no longer exposes the slides container. It returns
200
+ the widget you have added.
201
+ '''
202
+
203
+ def _next_slide(self):
204
+ if len(self.slides) < 2: # None, or 1 slide
205
+ return None
206
+ if self.loop and self.index == len(self.slides) - 1:
207
+ return self.slides[0]
208
+ if self.index < len(self.slides) - 1:
209
+ return self.slides[self.index + 1]
210
+
211
+ next_slide = AliasProperty(_next_slide,
212
+ bind=('slides', 'index', 'loop'),
213
+ cache=True)
214
+ '''The next slide in the Carousel. It is None if the current slide is
215
+ the last slide in the Carousel. This ordering reflects the order in which
216
+ the slides are added: their presentation varies according to the
217
+ :attr:`direction` property.
218
+
219
+ :attr:`next_slide` is an :class:`~kivy.properties.AliasProperty`.
220
+
221
+ .. versionchanged:: 1.5.0
222
+ The property no longer exposes the slides container.
223
+ It returns the widget you have added.
224
+ '''
225
+
226
+ scroll_timeout = NumericProperty(200)
227
+ '''Timeout allowed to trigger the :attr:`scroll_distance`, in milliseconds.
228
+ If the user has not moved :attr:`scroll_distance` within the timeout,
229
+ no scrolling will occur and the touch event will go to the children.
230
+
231
+ :attr:`scroll_timeout` is a :class:`~kivy.properties.NumericProperty` and
232
+ defaults to 200 (milliseconds)
233
+
234
+ .. versionadded:: 1.5.0
235
+ '''
236
+
237
+ scroll_distance = NumericProperty('20dp')
238
+ '''Distance to move before scrolling the :class:`Carousel` in pixels. As
239
+ soon as the distance has been traveled, the :class:`Carousel` will start
240
+ to scroll, and no touch event will go to children.
241
+ It is advisable that you base this value on the dpi of your target device's
242
+ screen.
243
+
244
+ :attr:`scroll_distance` is a :class:`~kivy.properties.NumericProperty` and
245
+ defaults to 20dp.
246
+
247
+ .. versionadded:: 1.5.0
248
+ '''
249
+
250
+ anim_type = StringProperty('out_quad')
251
+ '''Type of animation to use while animating to the next/previous slide.
252
+ This should be the name of an
253
+ :class:`~kivy.animation.AnimationTransition` function.
254
+
255
+ :attr:`anim_type` is a :class:`~kivy.properties.StringProperty` and
256
+ defaults to 'out_quad'.
257
+
258
+ .. versionadded:: 1.8.0
259
+ '''
260
+
261
+ ignore_perpendicular_swipes = BooleanProperty(False)
262
+ '''Ignore swipes on axis perpendicular to direction.
263
+
264
+ :attr:`ignore_perpendicular_swipes` is a
265
+ :class:`~kivy.properties.BooleanProperty` and defaults to False.
266
+
267
+ .. versionadded:: 1.10.0
268
+ '''
269
+
270
+ # private properties, for internal use only ###
271
+ _index = NumericProperty(0, allownone=True)
272
+ _prev = ObjectProperty(None, allownone=True)
273
+ _current = ObjectProperty(None, allownone=True)
274
+ _next = ObjectProperty(None, allownone=True)
275
+ _offset = NumericProperty(0)
276
+ _touch = ObjectProperty(None, allownone=True)
277
+
278
+ _change_touch_mode_ev = None
279
+
280
+ def __init__(self, **kwargs):
281
+ self._trigger_position_visible_slides = Clock.create_trigger(
282
+ self._position_visible_slides, -1)
283
+ super(Carousel, self).__init__(**kwargs)
284
+ self._skip_slide = None
285
+ self.touch_mode_change = False
286
+ self._prioritize_next = False
287
+ self.fbind('loop', lambda *args: self._insert_visible_slides())
288
+
289
+ def load_slide(self, slide):
290
+ '''Animate to the slide that is passed as the argument.
291
+
292
+ .. versionchanged:: 1.8.0
293
+ '''
294
+ slides = self.slides
295
+ start, stop = slides.index(self.current_slide), slides.index(slide)
296
+ if start == stop:
297
+ return
298
+
299
+ self._skip_slide = stop
300
+ if stop > start:
301
+ self._prioritize_next = True
302
+ self._insert_visible_slides(_next_slide=slide)
303
+ self.load_next()
304
+ else:
305
+ self._prioritize_next = False
306
+ self._insert_visible_slides(_prev_slide=slide)
307
+ self.load_previous()
308
+
309
+ def load_previous(self):
310
+ '''Animate to the previous slide.
311
+
312
+ .. versionadded:: 1.7.0
313
+ '''
314
+ self.load_next(mode='prev')
315
+
316
+ def load_next(self, mode='next'):
317
+ '''Animate to the next slide.
318
+
319
+ .. versionadded:: 1.7.0
320
+ '''
321
+ if self.index is not None:
322
+ w, h = self.size
323
+ _direction = {
324
+ 'top': -h / 2,
325
+ 'bottom': h / 2,
326
+ 'left': w / 2,
327
+ 'right': -w / 2}
328
+ _offset = _direction[self.direction]
329
+ if mode == 'prev':
330
+ _offset = -_offset
331
+
332
+ self._start_animation(min_move=0, offset=_offset)
333
+
334
+ def get_slide_container(self, slide):
335
+ return slide.parent
336
+
337
+ @property
338
+ def _prev_equals_next(self):
339
+ return self.loop and len(self.slides) == 2
340
+
341
+ def _insert_visible_slides(self, _next_slide=None, _prev_slide=None):
342
+ get_slide_container = self.get_slide_container
343
+
344
+ previous_slide = _prev_slide if _prev_slide else self.previous_slide
345
+ if previous_slide:
346
+ self._prev = get_slide_container(previous_slide)
347
+ else:
348
+ self._prev = None
349
+
350
+ current_slide = self.current_slide
351
+ if current_slide:
352
+ self._current = get_slide_container(current_slide)
353
+ else:
354
+ self._current = None
355
+
356
+ next_slide = _next_slide if _next_slide else self.next_slide
357
+ if next_slide:
358
+ self._next = get_slide_container(next_slide)
359
+ else:
360
+ self._next = None
361
+
362
+ if self._prev_equals_next:
363
+ setattr(self, '_prev' if self._prioritize_next else '_next', None)
364
+
365
+ super_remove = super(Carousel, self).remove_widget
366
+ for container in self.slides_container:
367
+ super_remove(container)
368
+
369
+ if self._prev and self._prev.parent is not self:
370
+ super(Carousel, self).add_widget(self._prev)
371
+ if self._next and self._next.parent is not self:
372
+ super(Carousel, self).add_widget(self._next)
373
+ if self._current:
374
+ super(Carousel, self).add_widget(self._current)
375
+
376
+ def _position_visible_slides(self, *args):
377
+ slides, index = self.slides, self.index
378
+ no_of_slides = len(slides) - 1
379
+ if not slides:
380
+ return
381
+ x, y, width, height = self.x, self.y, self.width, self.height
382
+ _offset, direction = self._offset, self.direction[0]
383
+ _prev, _next, _current = self._prev, self._next, self._current
384
+ get_slide_container = self.get_slide_container
385
+ last_slide = get_slide_container(slides[-1])
386
+ first_slide = get_slide_container(slides[0])
387
+ skip_next = False
388
+ _loop = self.loop
389
+
390
+ if direction in 'rl':
391
+ xoff = x + _offset
392
+ x_prev = {'l': xoff + width, 'r': xoff - width}
393
+ x_next = {'l': xoff - width, 'r': xoff + width}
394
+ if _prev:
395
+ _prev.pos = (x_prev[direction], y)
396
+ elif _loop and _next and index == 0:
397
+ # if first slide is moving to right with direction set to right
398
+ # or toward left with direction set to left
399
+ if ((_offset > 0 and direction == 'r') or
400
+ (_offset < 0 and direction == 'l')):
401
+ # put last_slide before first slide
402
+ last_slide.pos = (x_prev[direction], y)
403
+ skip_next = True
404
+ if _current:
405
+ _current.pos = (xoff, y)
406
+ if skip_next:
407
+ return
408
+ if _next:
409
+ _next.pos = (x_next[direction], y)
410
+ elif _loop and _prev and index == no_of_slides:
411
+ if ((_offset < 0 and direction == 'r') or
412
+ (_offset > 0 and direction == 'l')):
413
+ first_slide.pos = (x_next[direction], y)
414
+ if direction in 'tb':
415
+ yoff = y + _offset
416
+ y_prev = {'t': yoff - height, 'b': yoff + height}
417
+ y_next = {'t': yoff + height, 'b': yoff - height}
418
+ if _prev:
419
+ _prev.pos = (x, y_prev[direction])
420
+ elif _loop and _next and index == 0:
421
+ if ((_offset > 0 and direction == 't') or
422
+ (_offset < 0 and direction == 'b')):
423
+ last_slide.pos = (x, y_prev[direction])
424
+ skip_next = True
425
+ if _current:
426
+ _current.pos = (x, yoff)
427
+ if skip_next:
428
+ return
429
+ if _next:
430
+ _next.pos = (x, y_next[direction])
431
+ elif _loop and _prev and index == no_of_slides:
432
+ if ((_offset < 0 and direction == 't') or
433
+ (_offset > 0 and direction == 'b')):
434
+ first_slide.pos = (x, y_next[direction])
435
+
436
+ def on_size(self, *args):
437
+ size = self.size
438
+ for slide in self.slides_container:
439
+ slide.size = size
440
+ self._trigger_position_visible_slides()
441
+
442
+ def on_pos(self, *args):
443
+ self._trigger_position_visible_slides()
444
+
445
+ def on_index(self, *args):
446
+ self._insert_visible_slides()
447
+ self._trigger_position_visible_slides()
448
+ self._offset = 0
449
+
450
+ def on_slides(self, *args):
451
+ if self.slides:
452
+ self.index = self.index % len(self.slides)
453
+ self._insert_visible_slides()
454
+ self._trigger_position_visible_slides()
455
+
456
+ def on__offset(self, *args):
457
+ self._trigger_position_visible_slides()
458
+ # if reached full offset, switch index to next or prev
459
+ direction = self.direction[0]
460
+ _offset = self._offset
461
+ width = self.width
462
+ height = self.height
463
+ index = self.index
464
+ if self._skip_slide is not None or index is None:
465
+ return
466
+
467
+ # Move to next slide?
468
+ if (direction == 'r' and _offset <= -width) or \
469
+ (direction == 'l' and _offset >= width) or \
470
+ (direction == 't' and _offset <= - height) or \
471
+ (direction == 'b' and _offset >= height):
472
+ if self.next_slide:
473
+ self.index += 1
474
+
475
+ # Move to previous slide?
476
+ elif (direction == 'r' and _offset >= width) or \
477
+ (direction == 'l' and _offset <= -width) or \
478
+ (direction == 't' and _offset >= height) or \
479
+ (direction == 'b' and _offset <= -height):
480
+ if self.previous_slide:
481
+ self.index -= 1
482
+
483
+ elif self._prev_equals_next:
484
+ new_value = (_offset < 0) is (direction in 'rt')
485
+ if self._prioritize_next is not new_value:
486
+ self._prioritize_next = new_value
487
+ if new_value is (self._next is None):
488
+ self._prev, self._next = self._next, self._prev
489
+
490
+ def _start_animation(self, *args, **kwargs):
491
+ # compute target offset for ease back, next or prev
492
+ new_offset = 0
493
+ direction = kwargs.get('direction', self.direction)[0]
494
+ is_horizontal = direction in 'rl'
495
+ extent = self.width if is_horizontal else self.height
496
+ min_move = kwargs.get('min_move', self.min_move)
497
+ _offset = kwargs.get('offset', self._offset)
498
+
499
+ if _offset < min_move * -extent:
500
+ new_offset = -extent
501
+ elif _offset > min_move * extent:
502
+ new_offset = extent
503
+
504
+ # if new_offset is 0, it wasn't enough to go next/prev
505
+ dur = self.anim_move_duration
506
+ if new_offset == 0:
507
+ dur = self.anim_cancel_duration
508
+
509
+ # detect edge cases if not looping
510
+ len_slides = len(self.slides)
511
+ index = self.index
512
+ if not self.loop or len_slides == 1:
513
+ is_first = (index == 0)
514
+ is_last = (index == len_slides - 1)
515
+ if direction in 'rt':
516
+ towards_prev = (new_offset > 0)
517
+ towards_next = (new_offset < 0)
518
+ else:
519
+ towards_prev = (new_offset < 0)
520
+ towards_next = (new_offset > 0)
521
+ if (is_first and towards_prev) or (is_last and towards_next):
522
+ new_offset = 0
523
+
524
+ anim = Animation(_offset=new_offset, d=dur, t=self.anim_type)
525
+ anim.cancel_all(self)
526
+
527
+ def _cmp(*l):
528
+ if self._skip_slide is not None:
529
+ self.index = self._skip_slide
530
+ self._skip_slide = None
531
+
532
+ anim.bind(on_complete=_cmp)
533
+ anim.start(self)
534
+
535
+ def _get_uid(self, prefix='sv'):
536
+ return '{0}.{1}'.format(prefix, self.uid)
537
+
538
+ def on_touch_down(self, touch):
539
+ if not self.collide_point(*touch.pos):
540
+ touch.ud[self._get_uid('cavoid')] = True
541
+ return
542
+ if self.disabled:
543
+ return True
544
+ if self._touch:
545
+ return super(Carousel, self).on_touch_down(touch)
546
+ Animation.cancel_all(self)
547
+ self._touch = touch
548
+ uid = self._get_uid()
549
+ touch.grab(self)
550
+ touch.ud[uid] = {
551
+ 'mode': 'unknown',
552
+ 'time': touch.time_start}
553
+ self._change_touch_mode_ev = Clock.schedule_once(
554
+ self._change_touch_mode, self.scroll_timeout / 1000.)
555
+ self.touch_mode_change = False
556
+ return True
557
+
558
+ def on_touch_move(self, touch):
559
+ if not self.touch_mode_change:
560
+ if self.ignore_perpendicular_swipes and \
561
+ self.direction in ('top', 'bottom'):
562
+ if abs(touch.oy - touch.y) < self.scroll_distance:
563
+ if abs(touch.ox - touch.x) > self.scroll_distance:
564
+ self._change_touch_mode()
565
+ self.touch_mode_change = True
566
+ elif self.ignore_perpendicular_swipes and \
567
+ self.direction in ('right', 'left'):
568
+ if abs(touch.ox - touch.x) < self.scroll_distance:
569
+ if abs(touch.oy - touch.y) > self.scroll_distance:
570
+ self._change_touch_mode()
571
+ self.touch_mode_change = True
572
+
573
+ if self._get_uid('cavoid') in touch.ud:
574
+ return
575
+ if self._touch is not touch:
576
+ super(Carousel, self).on_touch_move(touch)
577
+ return self._get_uid() in touch.ud
578
+ if touch.grab_current is not self:
579
+ return True
580
+ ud = touch.ud[self._get_uid()]
581
+ direction = self.direction[0]
582
+ if ud['mode'] == 'unknown':
583
+ if direction in 'rl':
584
+ distance = abs(touch.ox - touch.x)
585
+ else:
586
+ distance = abs(touch.oy - touch.y)
587
+ if distance > self.scroll_distance:
588
+ ev = self._change_touch_mode_ev
589
+ if ev is not None:
590
+ ev.cancel()
591
+ ud['mode'] = 'scroll'
592
+ else:
593
+ if direction in 'rl':
594
+ self._offset += touch.dx
595
+ if direction in 'tb':
596
+ self._offset += touch.dy
597
+ return True
598
+
599
+ def on_touch_up(self, touch):
600
+ if self._get_uid('cavoid') in touch.ud:
601
+ return
602
+ if self in [x() for x in touch.grab_list]:
603
+ touch.ungrab(self)
604
+ self._touch = None
605
+ ud = touch.ud[self._get_uid()]
606
+ if ud['mode'] == 'unknown':
607
+ ev = self._change_touch_mode_ev
608
+ if ev is not None:
609
+ ev.cancel()
610
+ super(Carousel, self).on_touch_down(touch)
611
+ Clock.schedule_once(partial(self._do_touch_up, touch), .1)
612
+ else:
613
+ self._start_animation()
614
+
615
+ else:
616
+ if self._touch is not touch and self.uid not in touch.ud:
617
+ super(Carousel, self).on_touch_up(touch)
618
+ return self._get_uid() in touch.ud
619
+
620
+ def _do_touch_up(self, touch, *largs):
621
+ super(Carousel, self).on_touch_up(touch)
622
+ # don't forget about grab event!
623
+ for x in touch.grab_list[:]:
624
+ touch.grab_list.remove(x)
625
+ x = x()
626
+ if not x:
627
+ continue
628
+ touch.grab_current = x
629
+ super(Carousel, self).on_touch_up(touch)
630
+ touch.grab_current = None
631
+
632
+ def _change_touch_mode(self, *largs):
633
+ if not self._touch:
634
+ return
635
+ self._start_animation()
636
+ uid = self._get_uid()
637
+ touch = self._touch
638
+ ud = touch.ud[uid]
639
+ if ud['mode'] == 'unknown':
640
+ touch.ungrab(self)
641
+ self._touch = None
642
+ super(Carousel, self).on_touch_down(touch)
643
+ return
644
+
645
+ def add_widget(self, widget, index=0, *args, **kwargs):
646
+ container = RelativeLayout(
647
+ size=self.size, x=self.x - self.width, y=self.y)
648
+ container.add_widget(widget)
649
+ super(Carousel, self).add_widget(container, index, *args, **kwargs)
650
+ if index != 0:
651
+ self.slides.insert(index - len(self.slides), widget)
652
+ else:
653
+ self.slides.append(widget)
654
+
655
+ def remove_widget(self, widget, *args, **kwargs):
656
+ # XXX be careful, the widget.parent refer to the RelativeLayout
657
+ # added in add_widget(). But it will break if RelativeLayout
658
+ # implementation change.
659
+ # if we passed the real widget
660
+ slides = self.slides
661
+ if widget in slides:
662
+ if self.index >= slides.index(widget):
663
+ self.index = max(0, self.index - 1)
664
+ container = widget.parent
665
+ slides.remove(widget)
666
+ super(Carousel, self).remove_widget(container, *args, **kwargs)
667
+ container.remove_widget(widget)
668
+ return
669
+ super(Carousel, self).remove_widget(widget, *args, **kwargs)
670
+
671
+ def clear_widgets(self, children=None, *args, **kwargs):
672
+ # `children` must be a list of slides or None
673
+ if children is None:
674
+ children = self.slides[:]
675
+ remove_widget = self.remove_widget
676
+ for widget in children:
677
+ remove_widget(widget)
678
+ super(Carousel, self).clear_widgets()
679
+
680
+
681
+ if __name__ == '__main__':
682
+ from kivy.app import App
683
+
684
+ class Example1(App):
685
+
686
+ def build(self):
687
+ carousel = Carousel(direction='left',
688
+ loop=True)
689
+ for i in range(4):
690
+ src = "http://placehold.it/480x270.png&text=slide-%d&.png" % i
691
+ image = Factory.AsyncImage(source=src, fit_mode="contain")
692
+ carousel.add_widget(image)
693
+ return carousel
694
+
695
+ Example1().run()