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
@@ -0,0 +1,1059 @@
1
+ # coding=utf-8
2
+ """
3
+ Console
4
+ =======
5
+
6
+ .. versionadded:: 1.9.1
7
+
8
+ Reboot of the old inspector, designed to be modular and keep concerns
9
+ separated. It also has an addons architecture that allow you to add a button,
10
+ panel, or more in the Console itself.
11
+
12
+ .. warning::
13
+
14
+ This module works, but might fail in some cases. Please contribute!
15
+
16
+ Usage
17
+ -----
18
+
19
+ For normal module usage, please see the :mod:`~kivy.modules` documentation::
20
+
21
+ python main.py -m console
22
+
23
+ Mouse navigation
24
+ ----------------
25
+
26
+ When the "Select" button is activated, you can:
27
+
28
+ - tap once on a widget to select it without leaving inspect mode
29
+ - double tap on a widget to select and leave inspect mode (then you can
30
+ manipulate the widget again)
31
+
32
+ Keyboard navigation
33
+ -------------------
34
+
35
+ - "Ctrl + e": toggle console
36
+ - "Escape": cancel widget lookup, then hide inspector view
37
+ - "Up": select the parent widget
38
+ - "Down": select the first child of the currently selected widget
39
+ - "Left": select the previous sibling
40
+ - "Right": select the next sibling
41
+
42
+ Additional information
43
+ ----------------------
44
+
45
+ Some properties can be edited live. However, due to the delayed usage of
46
+ some properties, it might crash if you don't handle the required cases.
47
+
48
+ Addons
49
+ ------
50
+
51
+ Addons must be added to `Console.addons` before the first Clock tick of the
52
+ application, or before :attr:`create_console` is called. You currently cannot
53
+ add addons on the fly. Addons are quite cheap until the Console is activated.
54
+ Panels are even cheaper as nothing is done until the user selects them.
55
+
56
+ We provide multiple addons activated by default:
57
+
58
+ - ConsoleAddonFps: display the FPS at the top-right
59
+ - ConsoleAddonSelect: activate the selection mode
60
+ - ConsoleAddonBreadcrumb: display the hierarchy of the current widget at the
61
+ bottom
62
+ - ConsoleAddonWidgetTree: panel to display the widget tree of the application
63
+ - ConsoleAddonWidgetPanel: panel to display the properties of the selected
64
+ widget
65
+
66
+ If you need to add custom widgets in the Console, please use either
67
+ :class:`ConsoleButton`, :class:`ConsoleToggleButton` or :class:`ConsoleLabel`.
68
+
69
+ An addon must inherit from the :class:`ConsoleAddon` class.
70
+
71
+ For example, here is a simple addon for displaying the FPS at the top/right
72
+ of the Console::
73
+
74
+ from kivy.modules.console import Console, ConsoleAddon
75
+
76
+ class ConsoleAddonFps(ConsoleAddon):
77
+ def init(self):
78
+ self.lbl = ConsoleLabel(text="0 Fps")
79
+ self.console.add_toolbar_widget(self.lbl, right=True)
80
+
81
+ def activate(self):
82
+ self.event = Clock.schedule_interval(self.update_fps, 1 / 2.)
83
+
84
+ def deactivated(self):
85
+ self.event.cancel()
86
+
87
+ def update_fps(self, *args):
88
+ fps = Clock.get_fps()
89
+ self.lbl.text = "{} Fps".format(int(fps))
90
+
91
+ Console.register_addon(ConsoleAddonFps)
92
+
93
+
94
+ You can create addons that add panels. Panel activation/deactivation is not
95
+ tied to the addon activation/deactivation, but in some cases, you can use the
96
+ same callback for deactivating the addon and the panel. Here is a simple
97
+ "About" panel addon::
98
+
99
+ from kivy.modules.console import Console, ConsoleAddon, ConsoleLabel
100
+
101
+ class ConsoleAddonAbout(ConsoleAddon):
102
+ def init(self):
103
+ self.console.add_panel("About", self.panel_activate,
104
+ self.panel_deactivate)
105
+
106
+ def panel_activate(self):
107
+ self.console.bind(widget=self.update_content)
108
+ self.update_content()
109
+
110
+ def panel_deactivate(self):
111
+ self.console.unbind(widget=self.update_content)
112
+
113
+ def deactivate(self):
114
+ self.panel_deactivate()
115
+
116
+ def update_content(self, *args):
117
+ widget = self.console.widget
118
+ if not widget:
119
+ return
120
+ text = "Selected widget is: {!r}".format(widget)
121
+ lbl = ConsoleLabel(text=text)
122
+ self.console.set_content(lbl)
123
+
124
+ Console.register_addon(ConsoleAddonAbout)
125
+
126
+ """
127
+
128
+ __all__ = ("start", "stop", "create_console", "Console", "ConsoleAddon",
129
+ "ConsoleButton", "ConsoleToggleButton", "ConsoleLabel")
130
+
131
+ import kivy
132
+ kivy.require('1.9.0')
133
+
134
+ import weakref
135
+ from functools import partial
136
+ from itertools import chain
137
+ from kivy.logger import Logger
138
+ from kivy.uix.widget import Widget
139
+ from kivy.uix.button import Button
140
+ from kivy.uix.togglebutton import ToggleButton
141
+ from kivy.uix.label import Label
142
+ from kivy.uix.textinput import TextInput
143
+ from kivy.uix.image import Image
144
+ from kivy.uix.treeview import TreeViewNode, TreeView
145
+ from kivy.uix.gridlayout import GridLayout
146
+ from kivy.uix.relativelayout import RelativeLayout
147
+ from kivy.uix.boxlayout import BoxLayout
148
+ from kivy.uix.modalview import ModalView
149
+ from kivy.graphics import Color, Rectangle, PushMatrix, PopMatrix
150
+ from kivy.graphics.context_instructions import Transform
151
+ from kivy.graphics.transformation import Matrix
152
+ from kivy.properties import (ObjectProperty, BooleanProperty, ListProperty,
153
+ NumericProperty, StringProperty, OptionProperty,
154
+ ReferenceListProperty, AliasProperty,
155
+ VariableListProperty)
156
+ from kivy.graphics.texture import Texture
157
+ from kivy.clock import Clock
158
+ from kivy.lang import Builder
159
+
160
+ Builder.load_string("""
161
+ <Console>:
162
+ size_hint: (1, None) if self.mode == "docked" else (None, None)
163
+ height: dp(250)
164
+
165
+ canvas:
166
+ Color:
167
+ rgb: .185, .18, .18
168
+ Rectangle:
169
+ size: self.size
170
+ Color:
171
+ rgb: .3, .3, .3
172
+ Rectangle:
173
+ pos: 0, self.height - dp(48)
174
+ size: self.width, dp(48)
175
+
176
+ GridLayout:
177
+ cols: 1
178
+ id: layout
179
+
180
+ GridLayout:
181
+ id: toolbar
182
+ rows: 1
183
+ height: "48dp"
184
+ size_hint_y: None
185
+ padding: "4dp"
186
+ spacing: "4dp"
187
+
188
+
189
+ RelativeLayout:
190
+ id: content
191
+
192
+
193
+ <ConsoleAddonSeparator>:
194
+ size_hint_x: None
195
+ width: "10dp"
196
+
197
+ <ConsoleButton,ConsoleToggleButton,ConsoleLabel>:
198
+ size_hint_x: None
199
+ width: self.texture_size[0] + dp(20)
200
+
201
+
202
+ <ConsoleAddonBreadcrumbView>:
203
+ size_hint_y: None
204
+ height: "48dp"
205
+ canvas:
206
+ Color:
207
+ rgb: .3, .3, .3
208
+ Rectangle:
209
+ size: self.size
210
+ ScrollView:
211
+ id: sv
212
+ do_scroll_y: False
213
+ GridLayout:
214
+ id: stack
215
+ rows: 1
216
+ size_hint_x: None
217
+ width: self.minimum_width
218
+ padding: "4dp"
219
+ spacing: "4dp"
220
+
221
+ <TreeViewProperty>:
222
+ height: max(dp(48), max(lkey.texture_size[1], ltext.texture_size[1]))
223
+ Label:
224
+ id: lkey
225
+ text: root.key
226
+ text_size: (self.width, None)
227
+ width: 150
228
+ size_hint_x: None
229
+ Label:
230
+ id: ltext
231
+ text: [repr(getattr(root.widget, root.key, '')), root.refresh][0]\
232
+ if root.widget else ''
233
+ text_size: (self.width, None)
234
+
235
+ <ConsoleAddonWidgetTreeView>:
236
+ ScrollView:
237
+ scroll_type: ['bars', 'content']
238
+ bar_width: '10dp'
239
+
240
+ ConsoleAddonWidgetTreeImpl:
241
+ id: widgettree
242
+ hide_root: True
243
+ size_hint: None, None
244
+ height: self.minimum_height
245
+ width: max(self.parent.width, self.minimum_width)
246
+ selected_widget: root.widget
247
+ on_select_widget: root.console.highlight_widget(args[1])
248
+
249
+ <-TreeViewWidget>:
250
+ height: self.texture_size[1] + sp(4)
251
+ size_hint_x: None
252
+ width: self.texture_size[0] + sp(4)
253
+
254
+ canvas.before:
255
+ Color:
256
+ rgba: self.color_selected if self.is_selected else (0, 0, 0, 0)
257
+ Rectangle:
258
+ pos: self.pos
259
+ size: self.size
260
+ Color:
261
+ rgba: 1, 1, 1, int(not self.is_leaf)
262
+ Rectangle:
263
+ source:
264
+ ('atlas://data/images/defaulttheme/tree_%s' %
265
+ ('opened' if self.is_open else 'closed'))
266
+ size: 16, 16
267
+ pos: self.x - 20, self.center_y - 8
268
+
269
+ canvas:
270
+ Color:
271
+ rgba:
272
+ (self.disabled_color if self.disabled else
273
+ (self.color if not self.markup else (1, 1, 1, 1)))
274
+ Rectangle:
275
+ texture: self.texture
276
+ size: self.texture_size
277
+ pos:
278
+ (int(self.center_x - self.texture_size[0] / 2.),
279
+ int(self.center_y - self.texture_size[1] / 2.))
280
+
281
+ """)
282
+
283
+
284
+ def ignore_exception(f):
285
+ def f2(*args, **kwargs):
286
+ try:
287
+ return f(*args, **kwargs)
288
+ except:
289
+ pass
290
+
291
+ return f2
292
+
293
+
294
+ class TreeViewProperty(BoxLayout, TreeViewNode):
295
+ key = ObjectProperty(None, allownone=True)
296
+ refresh = BooleanProperty(False)
297
+ widget_ref = ObjectProperty(None, allownone=True)
298
+
299
+ def _get_widget(self):
300
+ wr = self.widget_ref
301
+ if wr is None:
302
+ return None
303
+ wr = wr()
304
+ if wr is None:
305
+ self.widget_ref = None
306
+ return None
307
+ return wr
308
+
309
+ widget = AliasProperty(_get_widget, None, bind=('widget_ref', ))
310
+
311
+
312
+ class ConsoleButton(Button):
313
+ """Button specialized for the Console"""
314
+ pass
315
+
316
+
317
+ class ConsoleToggleButton(ToggleButton):
318
+ """ToggleButton specialized for the Console"""
319
+ pass
320
+
321
+
322
+ class ConsoleLabel(Label):
323
+ """LabelButton specialized for the Console"""
324
+ pass
325
+
326
+
327
+ class ConsoleAddonSeparator(Widget):
328
+ pass
329
+
330
+
331
+ class ConsoleAddon(object):
332
+ """Base class for implementing addons"""
333
+
334
+ #: Console instance
335
+ console = None
336
+
337
+ def __init__(self, console):
338
+ super(ConsoleAddon, self).__init__()
339
+ self.console = console
340
+ self.init()
341
+
342
+ def init(self):
343
+ """Method called when the addon is instantiated by the Console
344
+ """
345
+ pass
346
+
347
+ def activate(self):
348
+ """Method called when the addon is activated by the console
349
+ (when the console is displayed)"""
350
+ pass
351
+
352
+ def deactivate(self):
353
+ """Method called when the addon is deactivated by the console
354
+ (when the console is hidden)
355
+ """
356
+ pass
357
+
358
+
359
+ class ConsoleAddonMode(ConsoleAddon):
360
+ def init(self):
361
+ btn = ConsoleToggleButton(text=u"Docked")
362
+ self.console.add_toolbar_widget(btn)
363
+
364
+
365
+ class ConsoleAddonSelect(ConsoleAddon):
366
+ def init(self):
367
+ self.btn = ConsoleToggleButton(text=u"Select")
368
+ self.btn.bind(state=self.on_button_state)
369
+ self.console.add_toolbar_widget(self.btn)
370
+ self.console.bind(inspect_enabled=self.on_inspect_enabled)
371
+
372
+ def on_inspect_enabled(self, instance, value):
373
+ self.btn.state = "down" if value else "normal"
374
+
375
+ def on_button_state(self, instance, value):
376
+ self.console.inspect_enabled = (value == "down")
377
+
378
+
379
+ class ConsoleAddonFps(ConsoleAddon):
380
+
381
+ _update_ev = None
382
+
383
+ def init(self):
384
+ self.lbl = ConsoleLabel(text="0 Fps")
385
+ self.console.add_toolbar_widget(self.lbl, right=True)
386
+
387
+ def activate(self):
388
+ ev = self._update_ev
389
+ if ev is None:
390
+ self._update_ev = Clock.schedule_interval(self.update_fps, 1 / 2.)
391
+ else:
392
+ ev()
393
+
394
+ def deactivated(self):
395
+ if self._update_ev is not None:
396
+ self._update_ev.cancel()
397
+
398
+ def update_fps(self, *args):
399
+ fps = Clock.get_fps()
400
+ self.lbl.text = "{} Fps".format(int(fps))
401
+
402
+
403
+ class ConsoleAddonBreadcrumbView(RelativeLayout):
404
+ widget = ObjectProperty(None, allownone=True)
405
+ parents = []
406
+
407
+ def on_widget(self, instance, value):
408
+ stack = self.ids.stack
409
+
410
+ # determine if we can just highlight the current one
411
+ # or if we need to rebuild the breadcrumb
412
+ prefs = [btn.widget_ref() for btn in self.parents]
413
+ if value in prefs:
414
+ # ok, so just toggle this one instead.
415
+ index = prefs.index(value)
416
+ for btn in self.parents:
417
+ btn.state = "normal"
418
+ self.parents[index].state = "down"
419
+ return
420
+
421
+ # we need to rebuild the breadcrumb.
422
+ stack.clear_widgets()
423
+ if not value:
424
+ return
425
+ widget = value
426
+ parents = []
427
+ while True:
428
+ btn = ConsoleButton(text=widget.__class__.__name__)
429
+ btn.widget_ref = weakref.ref(widget)
430
+ btn.bind(on_release=self.highlight_widget)
431
+ parents.append(btn)
432
+ if widget == widget.parent:
433
+ break
434
+ widget = widget.parent
435
+ for btn in reversed(parents):
436
+ stack.add_widget(btn)
437
+ self.ids.sv.scroll_x = 1
438
+ self.parents = parents
439
+ btn.state = "down"
440
+
441
+ def highlight_widget(self, instance):
442
+ self.console.widget = instance.widget_ref()
443
+
444
+
445
+ class ConsoleAddonBreadcrumb(ConsoleAddon):
446
+ def init(self):
447
+ self.view = ConsoleAddonBreadcrumbView()
448
+ self.view.console = self.console
449
+ self.console.ids.layout.add_widget(self.view)
450
+
451
+ def activate(self):
452
+ self.console.bind(widget=self.update_content)
453
+ self.update_content()
454
+
455
+ def deactivate(self):
456
+ self.console.unbind(widget=self.update_content)
457
+
458
+ def update_content(self, *args):
459
+ self.view.widget = self.console.widget
460
+
461
+
462
+ class ConsoleAddonWidgetPanel(ConsoleAddon):
463
+ def init(self):
464
+ self.console.add_panel("Properties", self.panel_activate,
465
+ self.deactivate)
466
+
467
+ def panel_activate(self):
468
+ self.console.bind(widget=self.update_content)
469
+ self.update_content()
470
+
471
+ def deactivate(self):
472
+ self.console.unbind(widget=self.update_content)
473
+
474
+ def update_content(self, *args):
475
+ widget = self.console.widget
476
+ if not widget:
477
+ return
478
+
479
+ from kivy.uix.scrollview import ScrollView
480
+ self.root = root = BoxLayout()
481
+ self.sv = sv = ScrollView(scroll_type=["bars", "content"],
482
+ bar_width='10dp')
483
+ treeview = TreeView(hide_root=True, size_hint_y=None)
484
+ treeview.bind(minimum_height=treeview.setter("height"))
485
+ keys = list(widget.properties().keys())
486
+ keys.sort()
487
+ node = None
488
+ wk_widget = weakref.ref(widget)
489
+ for key in keys:
490
+ node = TreeViewProperty(key=key, widget_ref=wk_widget)
491
+ node.bind(is_selected=self.show_property)
492
+ try:
493
+ widget.bind(**{
494
+ key: partial(self.update_node_content, weakref.ref(node))
495
+ })
496
+ except:
497
+ pass
498
+ treeview.add_node(node)
499
+
500
+ root.add_widget(sv)
501
+ sv.add_widget(treeview)
502
+ self.console.set_content(root)
503
+
504
+ def show_property(self, instance, value, key=None, index=-1, *l):
505
+ # normal call: (tree node, focus, )
506
+ # nested call: (widget, prop value, prop key, index in dict/list)
507
+ if value is False:
508
+ return
509
+
510
+ console = self.console
511
+ content = None
512
+ if key is None:
513
+ # normal call
514
+ nested = False
515
+ widget = instance.widget
516
+ key = instance.key
517
+ prop = widget.property(key)
518
+ value = getattr(widget, key)
519
+ else:
520
+ # nested call, we might edit subvalue
521
+ nested = True
522
+ widget = instance
523
+ prop = None
524
+
525
+ dtype = None
526
+
527
+ if isinstance(prop, AliasProperty) or nested:
528
+ # trying to resolve type dynamically
529
+ if type(value) in (str, str):
530
+ dtype = 'string'
531
+ elif type(value) in (int, float):
532
+ dtype = 'numeric'
533
+ elif type(value) in (tuple, list):
534
+ dtype = 'list'
535
+
536
+ if isinstance(prop, NumericProperty) or dtype == 'numeric':
537
+ content = TextInput(text=str(value) or '', multiline=False)
538
+ content.bind(
539
+ text=partial(self.save_property_numeric, widget, key, index))
540
+
541
+ elif isinstance(prop, StringProperty) or dtype == 'string':
542
+ content = TextInput(text=value or '', multiline=True)
543
+ content.bind(
544
+ text=partial(self.save_property_text, widget, key, index))
545
+
546
+ elif (isinstance(prop, ListProperty) or
547
+ isinstance(prop, ReferenceListProperty) or
548
+ isinstance(prop, VariableListProperty) or dtype == 'list'):
549
+ content = GridLayout(cols=1, size_hint_y=None)
550
+ content.bind(minimum_height=content.setter('height'))
551
+ for i, item in enumerate(value):
552
+ button = Button(text=repr(item), size_hint_y=None, height=44)
553
+ if isinstance(item, Widget):
554
+ button.bind(on_release=partial(console.highlight_widget,
555
+ item, False))
556
+ else:
557
+ button.bind(on_release=partial(self.show_property, widget,
558
+ item, key, i))
559
+ content.add_widget(button)
560
+
561
+ elif isinstance(prop, OptionProperty):
562
+ content = GridLayout(cols=1, size_hint_y=None)
563
+ content.bind(minimum_height=content.setter('height'))
564
+ for option in prop.options:
565
+ button = ToggleButton(
566
+ text=option,
567
+ state='down' if option == value else 'normal',
568
+ group=repr(content.uid),
569
+ size_hint_y=None,
570
+ height=44)
571
+ button.bind(
572
+ on_press=partial(self.save_property_option, widget, key))
573
+ content.add_widget(button)
574
+
575
+ elif isinstance(prop, ObjectProperty):
576
+ if isinstance(value, Widget):
577
+ content = Button(text=repr(value))
578
+ content.bind(
579
+ on_release=partial(console.highlight_widget, value))
580
+ elif isinstance(value, Texture):
581
+ content = Image(texture=value)
582
+ else:
583
+ content = Label(text=repr(value))
584
+
585
+ elif isinstance(prop, BooleanProperty):
586
+ state = 'down' if value else 'normal'
587
+ content = ToggleButton(text=key, state=state)
588
+ content.bind(on_release=partial(self.save_property_boolean, widget,
589
+ key, index))
590
+
591
+ self.root.clear_widgets()
592
+ self.root.add_widget(self.sv)
593
+ if content:
594
+ self.root.add_widget(content)
595
+
596
+ @ignore_exception
597
+ def save_property_numeric(self, widget, key, index, instance, value):
598
+ if index >= 0:
599
+ getattr(widget, key)[index] = float(instance.text)
600
+ else:
601
+ setattr(widget, key, float(instance.text))
602
+
603
+ @ignore_exception
604
+ def save_property_text(self, widget, key, index, instance, value):
605
+ if index >= 0:
606
+ getattr(widget, key)[index] = instance.text
607
+ else:
608
+ setattr(widget, key, instance.text)
609
+
610
+ @ignore_exception
611
+ def save_property_boolean(self, widget, key, index, instance, ):
612
+ value = instance.state == 'down'
613
+ if index >= 0:
614
+ getattr(widget, key)[index] = value
615
+ else:
616
+ setattr(widget, key, value)
617
+
618
+ @ignore_exception
619
+ def save_property_option(self, widget, key, instance, *l):
620
+ setattr(widget, key, instance.text)
621
+
622
+
623
+ class TreeViewWidget(Label, TreeViewNode):
624
+ widget = ObjectProperty(None)
625
+
626
+
627
+ class ConsoleAddonWidgetTreeImpl(TreeView):
628
+ selected_widget = ObjectProperty(None, allownone=True)
629
+
630
+ __events__ = ('on_select_widget', )
631
+
632
+ def __init__(self, **kwargs):
633
+ super(ConsoleAddonWidgetTreeImpl, self).__init__(**kwargs)
634
+ self.update_scroll = Clock.create_trigger(self._update_scroll)
635
+
636
+ def find_node_by_widget(self, widget):
637
+ for node in self.iterate_all_nodes():
638
+ if not node.parent_node:
639
+ continue
640
+ try:
641
+ if node.widget == widget:
642
+ return node
643
+ except ReferenceError:
644
+ pass
645
+ return None
646
+
647
+ def update_selected_widget(self, widget):
648
+ if widget:
649
+ node = self.find_node_by_widget(widget)
650
+ if node:
651
+ self.select_node(node, False)
652
+ while node and isinstance(node, TreeViewWidget):
653
+ if not node.is_open:
654
+ self.toggle_node(node)
655
+ node = node.parent_node
656
+
657
+ def on_selected_widget(self, inst, widget):
658
+ if widget:
659
+ self.update_selected_widget(widget)
660
+ self.update_scroll()
661
+
662
+ def select_node(self, node, select_widget=True):
663
+ super(ConsoleAddonWidgetTreeImpl, self).select_node(node)
664
+ if select_widget:
665
+ try:
666
+ self.dispatch("on_select_widget", node.widget.__self__)
667
+ except ReferenceError:
668
+ pass
669
+
670
+ def on_select_widget(self, widget):
671
+ pass
672
+
673
+ def _update_scroll(self, *args):
674
+ node = self._selected_node
675
+ if not node:
676
+ return
677
+
678
+ self.parent.scroll_to(node)
679
+
680
+
681
+ class ConsoleAddonWidgetTreeView(RelativeLayout):
682
+ widget = ObjectProperty(None, allownone=True)
683
+ _window_node = None
684
+
685
+ def _update_widget_tree_node(self, node, widget, is_open=False):
686
+ tree = self.ids.widgettree
687
+ update_nodes = []
688
+ nodes = {}
689
+ for cnode in node.nodes[:]:
690
+ try:
691
+ nodes[cnode.widget] = cnode
692
+ except ReferenceError:
693
+ # widget no longer exists, just remove it
694
+ pass
695
+ tree.remove_node(cnode)
696
+ for child in widget.children:
697
+ if isinstance(child, Console):
698
+ continue
699
+ if child in nodes:
700
+ cnode = tree.add_node(nodes[child], node)
701
+ else:
702
+ cnode = tree.add_node(
703
+ TreeViewWidget(text=child.__class__.__name__,
704
+ widget=child.proxy_ref,
705
+ is_open=is_open), node)
706
+ update_nodes.append((cnode, child))
707
+ return update_nodes
708
+
709
+ def update_widget_tree(self, *args):
710
+ win = self.console.win
711
+ if not self._window_node:
712
+ self._window_node = self.ids.widgettree.add_node(
713
+ TreeViewWidget(text="Window",
714
+ widget=win,
715
+ is_open=True))
716
+
717
+ nodes = self._update_widget_tree_node(self._window_node, win,
718
+ is_open=True)
719
+ while nodes:
720
+ ntmp = nodes[:]
721
+ nodes = []
722
+ for node in ntmp:
723
+ nodes += self._update_widget_tree_node(*node)
724
+
725
+ self.ids.widgettree.update_selected_widget(self.widget)
726
+
727
+
728
+ class ConsoleAddonWidgetTree(ConsoleAddon):
729
+ def init(self):
730
+ self.content = None
731
+ self.console.add_panel("Tree", self.panel_activate, self.deactivate,
732
+ self.panel_refresh)
733
+
734
+ def panel_activate(self):
735
+ self.console.bind(widget=self.update_content)
736
+ self.update_content()
737
+
738
+ def deactivate(self):
739
+ if self.content:
740
+ self.content.widget = None
741
+ self.content.console = None
742
+ self.console.unbind(widget=self.update_content)
743
+
744
+ def update_content(self, *args):
745
+ widget = self.console.widget
746
+ if not self.content:
747
+ self.content = ConsoleAddonWidgetTreeView()
748
+ self.content.console = self.console
749
+ self.content.widget = widget
750
+ self.content.update_widget_tree()
751
+ self.console.set_content(self.content)
752
+
753
+ def panel_refresh(self):
754
+ if self.content:
755
+ self.content.update_widget_tree()
756
+
757
+
758
+ class Console(RelativeLayout):
759
+ """Console interface
760
+
761
+ This widget is created by create_console(), when the module is loaded.
762
+ During that time, you can add addons on the console to extend the
763
+ functionalities, or add your own application stats / debugging module.
764
+ """
765
+
766
+ #: Array of addons that will be created at Console creation
767
+ addons = [ # ConsoleAddonMode,
768
+ ConsoleAddonSelect, ConsoleAddonFps, ConsoleAddonWidgetPanel,
769
+ ConsoleAddonWidgetTree, ConsoleAddonBreadcrumb]
770
+
771
+ #: Display mode of the Console, either docked at the bottom, or as a
772
+ #: floating window.
773
+ mode = OptionProperty("docked", options=["docked", "floated"])
774
+
775
+ #: Current widget being selected
776
+ widget = ObjectProperty(None, allownone=True)
777
+
778
+ #: Indicate if the inspector inspection is enabled. If yes, the next
779
+ #: touch down will select a the widget under the touch
780
+ inspect_enabled = BooleanProperty(False)
781
+
782
+ #: True if the Console is activated (showed)
783
+ activated = BooleanProperty(False)
784
+
785
+ def __init__(self, **kwargs):
786
+ self.win = kwargs.pop('win', None)
787
+ super(Console, self).__init__(**kwargs)
788
+ self.avoid_bring_to_top = False
789
+ with self.canvas.before:
790
+ self.gcolor = Color(1, 0, 0, .25)
791
+ PushMatrix()
792
+ self.gtransform = Transform(Matrix())
793
+ self.grect = Rectangle(size=(0, 0))
794
+ PopMatrix()
795
+ Clock.schedule_interval(self.update_widget_graphics, 0)
796
+
797
+ # instantiate all addons
798
+ self._toolbar = {"left": [], "panels": [], "right": []}
799
+ self._addons = []
800
+ self._panel = None
801
+ for addon in self.addons:
802
+ instance = addon(self)
803
+ self._addons.append(instance)
804
+ self._init_toolbar()
805
+ # select the first panel
806
+ self._panel = self._toolbar["panels"][0]
807
+ self._panel.state = "down"
808
+ self._panel.cb_activate()
809
+
810
+ def _init_toolbar(self):
811
+ toolbar = self.ids.toolbar
812
+ for key in ("left", "panels", "right"):
813
+ if key == "right":
814
+ toolbar.add_widget(Widget())
815
+ for el in self._toolbar[key]:
816
+ toolbar.add_widget(el)
817
+ if key != "right":
818
+ toolbar.add_widget(ConsoleAddonSeparator())
819
+
820
+ @classmethod
821
+ def register_addon(cls, addon):
822
+ cls.addons.append(addon)
823
+
824
+ def add_toolbar_widget(self, widget, right=False):
825
+ """Add a widget in the top left toolbar of the Console.
826
+ Use `right=True` if you wanna add the widget at the right instead.
827
+ """
828
+ key = "right" if right else "left"
829
+ self._toolbar[key].append(widget)
830
+
831
+ def remove_toolbar_widget(self, widget):
832
+ """Remove a widget from the toolbar
833
+ """
834
+ self.ids.toolbar.remove_widget(widget)
835
+
836
+ def add_panel(self, name, cb_activate, cb_deactivate, cb_refresh=None):
837
+ """Add a new panel in the Console.
838
+
839
+ - `cb_activate` is a callable that will be called when the panel is
840
+ activated by the user.
841
+
842
+ - `cb_deactivate` is a callable that will be called when the panel is
843
+ deactivated or when the console will hide.
844
+
845
+ - `cb_refresh` is an optional callable that is called if the user
846
+ click again on the button for display the panel
847
+
848
+ When activated, it's up to the panel to display a content in the
849
+ Console by using :meth:`set_content`.
850
+ """
851
+ btn = ConsoleToggleButton(text=name)
852
+ btn.cb_activate = cb_activate
853
+ btn.cb_deactivate = cb_deactivate
854
+ btn.cb_refresh = cb_refresh
855
+ btn.bind(on_press=self._activate_panel)
856
+ self._toolbar["panels"].append(btn)
857
+
858
+ def _activate_panel(self, instance):
859
+ if self._panel != instance:
860
+ self._panel.cb_deactivate()
861
+ self._panel.state = "normal"
862
+ self.ids.content.clear_widgets()
863
+ self._panel = instance
864
+ self._panel.cb_activate()
865
+ self._panel.state = "down"
866
+ else:
867
+ self._panel.state = "down"
868
+ if self._panel.cb_refresh:
869
+ self._panel.cb_refresh()
870
+
871
+ def set_content(self, content):
872
+ """Replace the Console content with a new one.
873
+ """
874
+ self.ids.content.clear_widgets()
875
+ self.ids.content.add_widget(content)
876
+
877
+ def on_touch_down(self, touch):
878
+ ret = super(Console, self).on_touch_down(touch)
879
+ if (('button' not in touch.profile or touch.button == 'left') and
880
+ not ret and self.inspect_enabled):
881
+ self.highlight_at(*touch.pos)
882
+ if touch.is_double_tap:
883
+ self.inspect_enabled = False
884
+ ret = True
885
+ else:
886
+ ret = self.collide_point(*touch.pos)
887
+ return ret
888
+
889
+ def on_touch_move(self, touch):
890
+ ret = super(Console, self).on_touch_move(touch)
891
+ if not ret and self.inspect_enabled:
892
+ self.highlight_at(*touch.pos)
893
+ ret = True
894
+ return ret
895
+
896
+ def on_touch_up(self, touch):
897
+ ret = super(Console, self).on_touch_up(touch)
898
+ if not ret and self.inspect_enabled:
899
+ ret = True
900
+ return ret
901
+
902
+ def on_window_children(self, win, children):
903
+ if self.avoid_bring_to_top or not self.activated:
904
+ return
905
+ self.avoid_bring_to_top = True
906
+ win.remove_widget(self)
907
+ win.add_widget(self)
908
+ self.avoid_bring_to_top = False
909
+
910
+ def highlight_at(self, x, y):
911
+ """Select a widget from a x/y window coordinate.
912
+ This is mostly used internally when Select mode is activated
913
+ """
914
+ widget = None
915
+ # reverse the loop - look at children on top first and
916
+ # modalviews before others
917
+ win_children = self.win.children
918
+ children = chain((c for c in reversed(win_children)
919
+ if isinstance(c, ModalView)),
920
+ (c for c in reversed(win_children)
921
+ if not isinstance(c, ModalView)))
922
+ for child in children:
923
+ if child is self:
924
+ continue
925
+ widget = self.pick(child, x, y)
926
+ if widget:
927
+ break
928
+ self.highlight_widget(widget)
929
+
930
+ def highlight_widget(self, widget, *largs):
931
+ # no widget to highlight, reduce rectangle to 0, 0
932
+ self.widget = widget
933
+ if not widget:
934
+ self.grect.size = 0, 0
935
+
936
+ def update_widget_graphics(self, *l):
937
+ if not self.activated:
938
+ return
939
+ if self.widget is None:
940
+ self.grect.size = 0, 0
941
+ return
942
+ self.grect.size = self.widget.size
943
+ matrix = self.widget.get_window_matrix()
944
+ if self.gtransform.matrix.get() != matrix.get():
945
+ self.gtransform.matrix = matrix
946
+
947
+ def pick(self, widget, x, y):
948
+ """Pick a widget at x/y, given a root `widget`
949
+ """
950
+ ret = None
951
+ # try to filter widgets that are not visible (invalid inspect target)
952
+ if (hasattr(widget, 'visible') and not widget.visible):
953
+ return ret
954
+ if widget.collide_point(x, y):
955
+ ret = widget
956
+ x2, y2 = widget.to_local(x, y)
957
+ # reverse the loop - look at children on top first
958
+ for child in reversed(widget.children):
959
+ ret = self.pick(child, x2, y2) or ret
960
+ return ret
961
+
962
+ def on_activated(self, instance, activated):
963
+ if activated:
964
+ self._activate_console()
965
+ else:
966
+ self._deactivate_console()
967
+
968
+ def _activate_console(self):
969
+ if self not in self.win.children:
970
+ self.win.add_widget(self)
971
+ self.y = 0
972
+ for addon in self._addons:
973
+ addon.activate()
974
+ Logger.info('Console: console activated')
975
+
976
+ def _deactivate_console(self):
977
+ for addon in self._addons:
978
+ addon.deactivate()
979
+ self.grect.size = 0, 0
980
+ self.y = -self.height
981
+ self.widget = None
982
+ self.inspect_enabled = False
983
+ # self.win.remove_widget(self)
984
+ self._window_node = None
985
+ Logger.info('Console: console deactivated')
986
+
987
+ def keyboard_shortcut(self, win, scancode, *largs):
988
+ modifiers = largs[-1]
989
+ if scancode == 101 and modifiers == ['ctrl']:
990
+ self.activated = not self.activated
991
+ if self.activated:
992
+ self.inspect_enabled = True
993
+ return True
994
+
995
+ elif scancode == 27:
996
+ if self.inspect_enabled:
997
+ self.inspect_enabled = False
998
+ return True
999
+ if self.activated:
1000
+ self.activated = False
1001
+ return True
1002
+
1003
+ if not self.activated or not self.widget:
1004
+ return
1005
+
1006
+ if scancode == 273: # top
1007
+ self.widget = self.widget.parent
1008
+
1009
+ elif scancode == 274: # down
1010
+ filtered_children = [c for c in self.widget.children
1011
+ if not isinstance(c, Console)]
1012
+ if filtered_children:
1013
+ self.widget = filtered_children[0]
1014
+
1015
+ elif scancode == 276: # left
1016
+ parent = self.widget.parent
1017
+ filtered_children = [c for c in parent.children
1018
+ if not isinstance(c, Console)]
1019
+ index = filtered_children.index(self.widget)
1020
+ index = max(0, index - 1)
1021
+ self.widget = filtered_children[index]
1022
+
1023
+ elif scancode == 275: # right
1024
+ parent = self.widget.parent
1025
+ filtered_children = [c for c in parent.children
1026
+ if not isinstance(c, Console)]
1027
+ index = filtered_children.index(self.widget)
1028
+ index = min(len(filtered_children) - 1, index + 1)
1029
+ self.widget = filtered_children[index]
1030
+
1031
+
1032
+ def create_console(win, ctx, *l):
1033
+ ctx.console = Console(win=win)
1034
+ win.bind(children=ctx.console.on_window_children,
1035
+ on_keyboard=ctx.console.keyboard_shortcut)
1036
+
1037
+
1038
+ def start(win, ctx):
1039
+ """Create an Console instance attached to the *ctx* and bound to the
1040
+ Window's :meth:`~kivy.core.window.WindowBase.on_keyboard` event for
1041
+ capturing the keyboard shortcut.
1042
+
1043
+ :Parameters:
1044
+ `win`: A :class:`Window <kivy.core.window.WindowBase>`
1045
+ The application Window to bind to.
1046
+ `ctx`: A :class:`~kivy.uix.widget.Widget` or subclass
1047
+ The Widget to be inspected.
1048
+
1049
+ """
1050
+ Clock.schedule_once(partial(create_console, win, ctx))
1051
+
1052
+
1053
+ def stop(win, ctx):
1054
+ """Stop and unload any active Inspectors for the given *ctx*."""
1055
+ if hasattr(ctx, "console"):
1056
+ win.unbind(children=ctx.console.on_window_children,
1057
+ on_keyboard=ctx.console.keyboard_shortcut)
1058
+ win.remove_widget(ctx.console)
1059
+ del ctx.console