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,84 @@
1
+ '''
2
+ Svg tests
3
+ ==============
4
+
5
+ Testing Svg rendering.
6
+ '''
7
+
8
+ from kivy.tests.common import GraphicUnitTest
9
+
10
+
11
+ SIMPLE_SVG = """<?xml version="1.0" standalone="no"?>
12
+ <svg width="256" height="256" viewBox="0 0 256 256" version="1.1"
13
+ xmlns="http://www.w3.org/2000/svg">
14
+ <rect stroke="blue" stroke-width="4" x="24" y="30" width="92" height="166"
15
+ fill="none" stroke-opacity="0.5" />
16
+ </svg>
17
+ """
18
+
19
+ SCALE_SVG = """<?xml version="1.0" standalone="no"?>
20
+ <svg width="256" height="256" viewBox="0 0 256 256" version="1.1"
21
+ xmlns="http://www.w3.org/2000/svg">
22
+ <rect stroke="red" stroke-width="4" x="24" y="30" width="10" height="10"
23
+ fill="none" stroke-opacity="0.5" transform="scale(2, 3)"/>
24
+ </svg>
25
+ """
26
+
27
+ ROTATE_SVG = """<?xml version="1.0" standalone="no"?>
28
+ <svg width="256" height="256" viewBox="0 0 256 256" version="1.1"
29
+ xmlns="http://www.w3.org/2000/svg">
30
+ <rect stroke="green" stroke-width="4" x="24" y="30" width="50" height="100"
31
+ stroke-opacity="0.75" transform="rotate(60 128 128)" />
32
+ </svg>
33
+ """
34
+
35
+
36
+ class SvgTest(GraphicUnitTest):
37
+
38
+ def test_simple(self):
39
+ import xml.etree.ElementTree as ET
40
+ from kivy.uix.widget import Widget
41
+ from kivy.graphics.svg import Svg
42
+
43
+ # create a root widget
44
+ wid = Widget()
45
+
46
+ # put some graphics instruction on it
47
+ with wid.canvas:
48
+ svg = Svg()
49
+ svg.set_tree(ET.ElementTree(ET.fromstring(SIMPLE_SVG)))
50
+
51
+ # render, and capture it directly
52
+ self.render(wid)
53
+
54
+ def test_scale(self):
55
+ import xml.etree.ElementTree as ET
56
+ from kivy.uix.widget import Widget
57
+ from kivy.graphics.svg import Svg
58
+
59
+ # create a root widget
60
+ wid = Widget()
61
+
62
+ # put some graphics instruction on it
63
+ with wid.canvas:
64
+ svg = Svg()
65
+ svg.set_tree(ET.ElementTree(ET.fromstring(SCALE_SVG)))
66
+
67
+ # render, and capture it directly
68
+ self.render(wid)
69
+
70
+ def test_rotate(self):
71
+ import xml.etree.ElementTree as ET
72
+ from kivy.uix.widget import Widget
73
+ from kivy.graphics.svg import Svg
74
+
75
+ # create a root widget
76
+ wid = Widget()
77
+
78
+ # put some graphics instruction on it
79
+ with wid.canvas:
80
+ svg = Svg()
81
+ svg.set_tree(ET.ElementTree(ET.fromstring(ROTATE_SVG)))
82
+
83
+ # render, and capture it directly
84
+ self.render(wid)
@@ -0,0 +1,74 @@
1
+ import unittest
2
+ import io
3
+ import os
4
+ import tempfile
5
+ from kivy import setupconfig
6
+
7
+
8
+ class ImageTestCase(unittest.TestCase):
9
+
10
+ def setUp(self):
11
+ from kivy.core.window import Window
12
+ from kivy.core.image import Image
13
+ import os
14
+ self.cls = Image
15
+ self.image = os.path.join(os.path.dirname(__file__), 'test_button.png')
16
+ print(self.image)
17
+ self.root = Image(self.image)
18
+
19
+ def test_keep_data(self):
20
+ root = self.root
21
+ texture = root.texture
22
+ self.assertEqual(root._image._data[0].data, None)
23
+ i1 = self.cls(self.image, keep_data=True)
24
+ if not i1._image._data[0].data:
25
+ self.fail('Image has no data even with keep_data = True')
26
+
27
+ @unittest.skip("Travis on Xenial don't have SDL_image >= 2.0.5")
28
+ def test_save_into_bytesio(self):
29
+ Image = self.cls
30
+
31
+ if setupconfig.PLATFORM == "darwin":
32
+ # XXX on OSX CI Builder, img_sdl2 is not used
33
+ # therefore the test below wont work yet with imageio only.
34
+ return
35
+
36
+ # load kivy logo
37
+ img = Image.load("data/logo/kivy-icon-512.png")
38
+ self.assertIsNotNone(img)
39
+
40
+ # try to save without any format
41
+ with self.assertRaises(Exception) as context:
42
+ bio = io.BytesIO()
43
+ img.save(bio)
44
+
45
+ # save it in png
46
+ bio = io.BytesIO()
47
+ # if False, then there is no provider
48
+ self.assertTrue(img.save(bio, fmt="png"))
49
+ pngdata = bio.read()
50
+ self.assertTrue(len(pngdata) > 0)
51
+
52
+ # try to save in a filename
53
+ try:
54
+ _, filename = tempfile.mkstemp(suffix=".png")
55
+ self.assertTrue(img.save(filename, fmt="png"))
56
+ finally:
57
+ os.unlink(filename)
58
+
59
+ # XXX Test wrote but temporary commented
60
+ # XXX because of the issue #6123 on OSX
61
+ # XXX https://github.com/kivy/kivy/issues/6123
62
+ # with open(filename, "rb") as fd2:
63
+ # pngdatafile = fd2.read()
64
+ # # check the png file data is the same as bytesio
65
+ # self.assertTrue(pngdata == pngdatafile)
66
+
67
+ # save it in jpeg
68
+ bio = io.BytesIO()
69
+ # if False, then there is no provider
70
+ self.assertTrue(img.save(bio, fmt="jpg"))
71
+ self.assertTrue(len(bio.read()) > 0)
72
+
73
+ with tempfile.NamedTemporaryFile(suffix=".jpg") as fd:
74
+ self.assertTrue(img.save(fd.name))
@@ -0,0 +1,485 @@
1
+ # You need an image testsuite to run this, for information see:
2
+ # kivy/tools/image-testsuite/README.md
3
+
4
+ import os
5
+ import re
6
+ import sys
7
+ import unittest
8
+ from collections import defaultdict
9
+ from kivy.core.image import ImageLoader
10
+
11
+ DEBUG = False
12
+ ASSETDIR = 'image-testsuite'
13
+ LOADERS = {x.__name__: x for x in ImageLoader.loaders}
14
+
15
+ if 'ImageLoaderPygame' not in LOADERS:
16
+ try:
17
+ from kivy.core.image.img_pygame import ImageLoaderPygame
18
+ LOADERS['ImageLoaderPygame'] = ImageLoaderPygame
19
+ except:
20
+ pass
21
+
22
+ # Kivy image test protocol v0: Pixel values
23
+ v0_PIXELS = { # NOTE: 't' is not included here, see match_prediction()
24
+ 'w': [0xFF, 0xFF, 0xFF], 'x': [0x00, 0x00, 0x00], 'r': [0xFF, 0x00, 0x00],
25
+ 'g': [0x00, 0xFF, 0x00], 'b': [0x00, 0x00, 0xFF], 'y': [0xFF, 0xFF, 0x00],
26
+ 'c': [0x00, 0xFF, 0xFF], 'p': [0xFF, 0x00, 0xFF], '0': [0x00, 0x00, 0x00],
27
+ '1': [0x11, 0x11, 0x11], '2': [0x22, 0x22, 0x22], '3': [0x33, 0x33, 0x33],
28
+ '4': [0x44, 0x44, 0x44], '5': [0x55, 0x55, 0x55], '6': [0x66, 0x66, 0x66],
29
+ '7': [0x77, 0x77, 0x77], '8': [0x88, 0x88, 0x88], '9': [0x99, 0x99, 0x99],
30
+ 'A': [0xAA, 0xAA, 0xAA], 'B': [0xBB, 0xBB, 0xBB], 'C': [0xCC, 0xCC, 0xCC],
31
+ 'D': [0xDD, 0xDD, 0xDD], 'E': [0xEE, 0xEE, 0xEE], 'F': [0xFF, 0xFF, 0xFF]}
32
+
33
+ # Kivy image test protocol v0: File name
34
+ # width x height _ pattern _ alpha _ fmtinfo _ testname _ encoder . ext
35
+ v0_FILE_RE = re.compile(r'^v0_(\d+)x(\d+)_' r'([wxrgbycptA-F0-9]+)_'
36
+ r'([0-9a-fA-F]{2})_' r'([a-zA-Z0-9-]+)_'
37
+ r'([a-zA-Z0-9-]+)_' r'([a-zA-Z0-9-]+)'
38
+ r'\.([a-z]+)$')
39
+
40
+
41
+ def asset(*fn):
42
+ return os.path.abspath(os.path.join(os.path.dirname(__file__), *fn))
43
+
44
+
45
+ def has_alpha(fmt):
46
+ return fmt in ('rgba', 'bgra', 'argb', 'abgr')
47
+
48
+
49
+ def bytes_per_pixel(fmt):
50
+ if fmt in ('rgb', 'bgr'):
51
+ return 3
52
+ if fmt in ('rgba', 'bgra', 'argb', 'abgr'):
53
+ return 4
54
+ raise Exception('bytes_per_pixel: unknown format {}'.format(fmt))
55
+
56
+
57
+ def get_pixel_alpha(pix, fmt):
58
+ if fmt in ('rgba', 'bgra'):
59
+ return pix[3]
60
+ elif fmt in ('abgr', 'argb'):
61
+ return pix[0]
62
+ return 0xFF
63
+
64
+
65
+ # Converts (predicted) rgba pixels to the format claimed by image loader
66
+ def rgba_to(pix_in, target_fmt, w, h, pitch=None):
67
+ if not isinstance(pix_in, (bytes, bytearray)):
68
+ pix_in = bytearray(pix_in)
69
+ assert w > 0 and h > 0, "Must specify w and h"
70
+ assert len(pix_in) == w * h * 4, "Invalid rgba data {}".format(pix_in)
71
+ assert target_fmt in ('rgba', 'bgra', 'argb', 'abgr', 'rgb', 'bgr')
72
+
73
+ if target_fmt == 'rgba':
74
+ return pix_in
75
+
76
+ pixels = [pix_in[i:i + 4] for i in range(0, len(pix_in), 4)]
77
+ if target_fmt == 'bgra':
78
+ return b''.join([bytes(p[:3][::-1] + p[3:]) for p in pixels])
79
+ elif target_fmt == 'abgr':
80
+ return b''.join([bytes(p[3:] + p[:3][::-1]) for p in pixels])
81
+ elif target_fmt == 'argb':
82
+ return b''.join([bytes(p[3:] + p[:3]) for p in pixels])
83
+
84
+ # rgb/bgr, default to 4 byte alignment
85
+ if pitch is None:
86
+ pitch = ((3 * w) + 3) & ~3
87
+ # Assume pitch 0 == unaligned
88
+ elif pitch == 0:
89
+ pitch = 3 * w
90
+
91
+ out = b''
92
+ padding = b'\x00' * (pitch - w * 3)
93
+ for row in [pix_in[i:i + w * 4] for i in range(0, len(pix_in), w * 4)]:
94
+ pixelrow = [row[i:i + 4] for i in range(0, len(row), 4)]
95
+ if target_fmt == 'rgb':
96
+ out += b''.join([bytes(p[:3]) for p in pixelrow])
97
+ elif target_fmt == 'bgr':
98
+ out += b''.join([bytes(p[:3][::-1]) for p in pixelrow])
99
+ out += padding
100
+ return out
101
+
102
+
103
+ def match_prediction(pixels, fmt, fd, pitch):
104
+ assert len(fd['alpha']) == 2
105
+ assert len(fd['pattern']) > 0
106
+
107
+ bpp = bytes_per_pixel(fmt)
108
+ rowlen = fd['w'] * bpp
109
+ if pitch is None:
110
+ pitch = (rowlen + 3) & ~3
111
+ elif pitch == 0:
112
+ pitch = fd['w'] * bpp
113
+ pitchalign = pitch - rowlen
114
+
115
+ errors = []
116
+ fail = errors.append
117
+
118
+ if len(pixels) != pitch * fd['h']:
119
+ fail("Pitch error: pitch {} * {} height != {} pixelbytes"
120
+ .format(pitch, fd['h'], len(pixels)))
121
+
122
+ ptr = 0
123
+ pixnum = 0
124
+ for char in fd['pattern']:
125
+ pix = list(bytearray(pixels[ptr:ptr + bpp]))
126
+ # print("PIXNUM {} ptr={} bpp={} : {}".format(pixnum, ptr, bpp, pix))
127
+ if len(pix) != bpp:
128
+ fail("Want {} bytes per pixel, got {}: {}"
129
+ .format(bpp, len(pix), pix))
130
+ break
131
+
132
+ if char == 't':
133
+ if get_pixel_alpha(pix, fmt) != 0:
134
+ fail("pixel {} nonzero 't' pixel alpha {:02X}: {}".format(
135
+ pixnum, get_pixel_alpha(pix, fmt), pix))
136
+ else:
137
+ srcpix = v0_PIXELS[char] + list(bytearray.fromhex(fd['alpha']))
138
+ predict = rgba_to(srcpix, fmt, 1, 1, pitch=0)
139
+ predict = list(bytearray(predict))
140
+ if not predict or not pix or predict != pix:
141
+ fail("pixel {} {} format mismatch: want {} ({}) -- got {}"
142
+ .format(pixnum, fmt, predict, char, pix))
143
+
144
+ if pitchalign and (pixnum + 1) % fd['w'] == 0:
145
+ check = list(bytearray(pixels[ptr + bpp:ptr + bpp + pitchalign]))
146
+ if check != [0] * pitchalign:
147
+ fail("Want {} 0x00 pitch align pixnum={}, pos={} got: {}"
148
+ .format(pitchalign, pixnum, ptr + bpp, check))
149
+ ptr += pitchalign
150
+ ptr += bpp
151
+ pixnum += 1
152
+
153
+ if ptr != len(pixels):
154
+ fail("Excess data: pixnum={} ptr={} bytes={}, bpp={} pitchalign={}"
155
+ .format(pixnum, ptr, len(pixels), bpp, pitchalign))
156
+ return (len(errors) == 0, errors)
157
+
158
+
159
+ class _TestContext(object):
160
+ def __init__(self, loadercls):
161
+ self.loadercls = loadercls
162
+ self._fd = None
163
+ self._fn = None
164
+ self._ok = 0
165
+ self._skip = 0
166
+ self._fail = 0
167
+ self._stats = defaultdict(dict)
168
+
169
+ @property
170
+ def stats(self):
171
+ return self._stats
172
+
173
+ @property
174
+ def results(self):
175
+ return (self._ok, self._skip, self._fail, self._stats)
176
+
177
+ def start(self, fn, fd):
178
+ assert not self._fn, "unexpected ctx.start(), already started"
179
+ assert isinstance(fd, dict)
180
+ self._fn = fn
181
+ self._fd = fd
182
+
183
+ def end(self, fn=None):
184
+ assert not fn or self._fn == fn, "unexpected ctx.end(), fn mismatch"
185
+ self._fn = None
186
+ self._fd = None
187
+
188
+ def ok(self, info):
189
+ assert self._fn, "unexpected ctx.ok(), fn=None"
190
+ self._ok += 1
191
+ self.dbg('PASS', info)
192
+ self._incstat('ok')
193
+ self.end(self._fn)
194
+
195
+ def skip(self, info):
196
+ assert self._fn, "unexpected ctx.skip(), fn=None"
197
+ self._skip += 1
198
+ self.dbg('SKIP', info)
199
+ self._incstat('skip')
200
+ self.end(self._fn)
201
+
202
+ def fail(self, info):
203
+ assert self._fn, "unexpected ctx.fail(), fn=None"
204
+ self._fail += 1
205
+ self.dbg('FAIL', info)
206
+ self._incstat('fail')
207
+ self.end(self._fn)
208
+
209
+ def dbg(self, msgtype, info):
210
+ assert self._fn, "unexpected ctx.dbg(), fn=None"
211
+ if DEBUG:
212
+ print("{} {} {}: {}"
213
+ .format(self.loadercls.__name__, msgtype, self._fn, info))
214
+
215
+ def _incstat(self, s):
216
+ assert self._fd, "unexpected ctx._incstat(), fd=None"
217
+ fd = self._fd
218
+
219
+ def IS(key):
220
+ self._stats.setdefault(s, defaultdict(int))[key] += 1
221
+
222
+ IS('total')
223
+ IS('extension:{}'.format(fd['ext']))
224
+ IS('encoder:{}'.format(fd['encoder']))
225
+ IS('fmtinfo:{}'.format(fd['fmtinfo']))
226
+ IS('testname:{}'.format(fd['testname']))
227
+ IS('testname+ext:{}+{}'.format(fd['testname'], fd['ext']))
228
+ IS('encoder+ext:{}+{}'.format(fd['encoder'], fd['ext']))
229
+ IS('encoder+testname:{}+{}'.format(fd['encoder'], fd['testname']))
230
+ IS('fmtinfo+ext:{}+{}'.format(fd['fmtinfo'], fd['ext']))
231
+
232
+
233
+ @unittest.skipIf(not os.path.isdir(asset(ASSETDIR)),
234
+ "Need 'make image-testsuite' to run test")
235
+ class ImageLoaderTestCase(unittest.TestCase):
236
+ def setUp(self):
237
+ self._context = None
238
+ self._prepare_images()
239
+
240
+ def tearDown(self):
241
+ if not DEBUG or not self._context:
242
+ return
243
+ ctx = self._context
244
+ il = ctx.loadercls.__name__
245
+ stats = ctx.stats
246
+ keys = set([k for x in stats.values() for k in x.keys()])
247
+ sg = stats.get
248
+ for k in sorted(keys):
249
+ ok, skip, fail = sg('ok', {}), sg('skip', {}), sg('fail', {})
250
+ print("REPORT {} {}: ok={}, skip={}, fail={}".format(
251
+ il, k, ok.get(k, 0), skip.get(k, 0), fail.get(k, 0)))
252
+
253
+ def _prepare_images(self):
254
+ if hasattr(self, '_image_files'):
255
+ return
256
+ self._image_files = {}
257
+ for filename in os.listdir(asset(ASSETDIR)):
258
+ matches = v0_FILE_RE.match(filename)
259
+ if not matches:
260
+ continue
261
+ w, h, pat, alpha, fmtinfo, tst, encoder, ext = matches.groups()
262
+ self._image_files[filename] = {
263
+ 'filename': filename,
264
+ 'w': int(w),
265
+ 'h': int(h),
266
+ 'pattern': pat,
267
+ 'alpha': alpha,
268
+ 'fmtinfo': fmtinfo,
269
+ 'testname': tst,
270
+ 'encoder': encoder,
271
+ 'ext': ext,
272
+ 'require_alpha': 'BINARY' in tst or 'ALPHA' in tst,
273
+ }
274
+
275
+ def _test_imageloader(self, loadercls, extensions=None):
276
+ if not loadercls:
277
+ return
278
+ if not extensions:
279
+ extensions = loadercls.extensions()
280
+
281
+ ctx = _TestContext(loadercls)
282
+ self._context = ctx
283
+ for filename in sorted(self._image_files.keys()):
284
+ filedata = self._image_files[filename]
285
+
286
+ if filedata['ext'] not in extensions:
287
+ continue
288
+ try:
289
+ ctx.start(filename, filedata)
290
+ result = loadercls(asset(ASSETDIR, filename), keep_data=True)
291
+ if not result:
292
+ raise Exception('invalid result')
293
+ except:
294
+ ctx.skip('Error loading file, result=None')
295
+ continue
296
+ self._test_image(filedata, ctx, loadercls, result)
297
+ ctx.end()
298
+
299
+ ok, skip, fail, stats = ctx.results
300
+ if fail:
301
+ self.fail('{}: {} passed, {} skipped, {} failed'
302
+ .format(loadercls.__name__, ok, skip, fail))
303
+ return ctx
304
+
305
+ def _test_image(self, fd, ctx, loadercls, imgdata):
306
+ w, h, pixels, pitch = imgdata._data[0].get_mipmap(0)
307
+ fmt = imgdata._data[0].fmt
308
+
309
+ # required for FFPy memview
310
+ # FIXME: bytearray() for py2 compat, I can't be bothered to research
311
+ if not isinstance(pixels, bytes):
312
+ pixels = bytearray(pixels)
313
+
314
+ def debug():
315
+ if not DEBUG:
316
+ return
317
+ print(" format: {}x{} {}".format(w, h, fmt))
318
+ print(" pitch: got {}, want {}".format(pitch, want_pitch))
319
+ print(" want: {} in {}".format(fd['pattern'], fmt))
320
+ print(" got: {}".format(bytearray(pixels)))
321
+
322
+ # Assume pitch 0 = unaligned
323
+ want_pitch = (pitch == 0) and bytes_per_pixel(fmt) * w or pitch
324
+ if pitch == 0 and bytes_per_pixel(fmt) * w * h != len(pixels):
325
+ ctx.dbg("PITCH", "pitch=0, expected fmt={} to be "
326
+ "unaligned @ ({}bpp) = {} bytes, got {}"
327
+ .format(fmt, bytes_per_pixel(fmt),
328
+ bytes_per_pixel(fmt) * w * h,
329
+ len(pixels)))
330
+ elif pitch and want_pitch != pitch:
331
+ ctx.dbg("PITCH", "fmt={}, pitch={}, expected {}"
332
+ .format(fmt, pitch, want_pitch))
333
+
334
+ success, msgs = match_prediction(pixels, fmt, fd, pitch)
335
+ if not success:
336
+ if not msgs:
337
+ ctx.fail("Unknown error")
338
+ elif len(msgs) == 1:
339
+ ctx.fail(msgs[0])
340
+ else:
341
+ for m in msgs:
342
+ ctx.dbg('PREDICT', m)
343
+ ctx.fail('{} errors, see debug output: {}'
344
+ .format(len(msgs), msgs[-1]))
345
+ debug()
346
+ elif fd['require_alpha'] and not has_alpha(fmt):
347
+ ctx.fail('Missing expected alpha channel')
348
+ debug()
349
+ elif fd['w'] != w:
350
+ ctx.fail('Width mismatch, want {} got {}'
351
+ .format(fd['w'], w))
352
+ debug()
353
+ elif fd['h'] != h:
354
+ ctx.fail('Height mismatch, want {} got {}'
355
+ .format(fd['h'], h))
356
+ debug()
357
+ elif w != 1 and h != 1:
358
+ ctx.fail('v0 test protocol mandates w=1 or h=1')
359
+ debug()
360
+ else:
361
+ ctx.ok("Passed test as {}x{} {}".format(w, h, fmt))
362
+ sys.stdout.flush()
363
+
364
+ def test_ImageLoaderSDL2(self):
365
+ loadercls = LOADERS.get('ImageLoaderSDL2')
366
+ # GIF format not listed as supported in sdl2 loader
367
+ if loadercls:
368
+ exts = list(loadercls.extensions()) + ['gif']
369
+ ctx = self._test_imageloader(loadercls, exts)
370
+
371
+ def test_ImageLoaderPIL(self):
372
+ loadercls = LOADERS.get('ImageLoaderPIL')
373
+ ctx = self._test_imageloader(loadercls)
374
+
375
+ def test_ImageLoaderPygame(self):
376
+ loadercls = LOADERS.get('ImageLoaderPygame')
377
+ ctx = self._test_imageloader(loadercls)
378
+
379
+ def test_ImageLoaderFFPy(self):
380
+ loadercls = LOADERS.get('ImageLoaderFFPy')
381
+ ctx = self._test_imageloader(loadercls)
382
+
383
+ def test_ImageLoaderGIF(self):
384
+ loadercls = LOADERS.get('ImageLoaderGIF')
385
+ ctx = self._test_imageloader(loadercls)
386
+
387
+ def test_ImageLoaderDDS(self):
388
+ loadercls = LOADERS.get('ImageLoaderDDS')
389
+ ctx = self._test_imageloader(loadercls)
390
+
391
+ def test_ImageLoaderTex(self):
392
+ loadercls = LOADERS.get('ImageLoaderTex')
393
+ ctx = self._test_imageloader(loadercls)
394
+
395
+ def test_ImageLoaderImageIO(self):
396
+ loadercls = LOADERS.get('ImageLoaderImageIO')
397
+ ctx = self._test_imageloader(loadercls)
398
+
399
+ def test_missing_tests(self):
400
+ for loader in ImageLoader.loaders:
401
+ key = 'test_{}'.format(loader.__name__)
402
+ msg = "Missing ImageLoader test case: {}".format(key)
403
+ self.assertTrue(hasattr(self, key), msg)
404
+ self.assertTrue(callable(getattr(self, key)), msg)
405
+
406
+
407
+ class ConverterTestCase(unittest.TestCase):
408
+ def test_internal_converter_2x1(self):
409
+ correct = {
410
+ 'rgba': b'\x01\x02\x03\xA1\x04\x05\x06\xA2',
411
+ 'abgr': b'\xA1\x03\x02\x01\xA2\x06\x05\x04',
412
+ 'bgra': b'\x03\x02\x01\xA1\x06\x05\x04\xA2',
413
+ 'argb': b'\xA1\x01\x02\x03\xA2\x04\x05\x06',
414
+ 'rgb': b'\x01\x02\x03\x04\x05\x06',
415
+ 'bgr': b'\x03\x02\x01\x06\x05\x04',
416
+ 'rgb_align4': b'\x01\x02\x03\x04\x05\x06\x00\x00',
417
+ 'bgr_align4': b'\x03\x02\x01\x06\x05\x04\x00\x00'}
418
+ src = correct.get
419
+ rgba = src('rgba')
420
+ self.assertEqual(rgba_to(rgba, 'rgba', 2, 1, 0), src('rgba'))
421
+ self.assertEqual(rgba_to(rgba, 'abgr', 2, 1, 0), src('abgr'))
422
+ self.assertEqual(rgba_to(rgba, 'bgra', 2, 1, 0), src('bgra'))
423
+ self.assertEqual(rgba_to(rgba, 'argb', 2, 1, 0), src('argb'))
424
+ self.assertEqual(rgba_to(rgba, 'rgb', 2, 1, 0), src('rgb'))
425
+ self.assertEqual(rgba_to(rgba, 'bgr', 2, 1, 0), src('bgr'))
426
+ self.assertEqual(rgba_to(rgba, 'rgb', 2, 1, None), src('rgb_align4'))
427
+ self.assertEqual(rgba_to(rgba, 'bgr', 2, 1, None), src('bgr_align4'))
428
+
429
+ def test_internal_converter_3x1(self):
430
+ pad6 = b'\x00' * 6
431
+ correct = {
432
+ 'rgba': b'\x01\x02\x03\xFF\x04\x05\x06\xFF\x07\x08\x09\xFF',
433
+ 'abgr': b'\xFF\x03\x02\x01\xFF\x06\x05\x04\xFF\x09\x08\x07',
434
+ 'bgra': b'\x03\x02\x01\xFF\x06\x05\x04\xFF\x09\x08\x07\xFF',
435
+ 'argb': b'\xFF\x01\x02\x03\xFF\x04\x05\x06\xFF\x07\x08\x09',
436
+ 'rgb_align2': b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00',
437
+ 'bgr_align2': b'\x03\x02\x01\x06\x05\x04\x09\x08\x07\x00',
438
+ 'rgb_align8': b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00' + pad6,
439
+ 'bgr_align8': b'\x03\x02\x01\x06\x05\x04\x09\x08\x07\x00' + pad6}
440
+ src = correct.get
441
+ rgba = src('rgba')
442
+ self.assertEqual(rgba_to(rgba, 'bgra', 3, 1, 0), src('bgra'))
443
+ self.assertEqual(rgba_to(rgba, 'argb', 3, 1, 0), src('argb'))
444
+ self.assertEqual(rgba_to(rgba, 'abgr', 3, 1, 0), src('abgr'))
445
+ self.assertEqual(rgba_to(rgba, 'rgb', 3, 1, 10), src('rgb_align2'))
446
+ self.assertEqual(rgba_to(rgba, 'bgr', 3, 1, 10), src('bgr_align2'))
447
+ self.assertEqual(rgba_to(rgba, 'rgb', 3, 1, 16), src('rgb_align8'))
448
+ self.assertEqual(rgba_to(rgba, 'bgr', 3, 1, 16), src('bgr_align8'))
449
+
450
+ def test_internal_converter_1x3(self):
451
+ pad5 = b'\x00' * 5
452
+ correct = {
453
+ 'rgba': b'\x01\x02\x03\xFF\x04\x05\x06\xFF\x07\x08\x09\xFF',
454
+ 'rgb_raw': b'\x01\x02\x03\x04\x05\x06\x07\x08\x09',
455
+ 'bgr_raw': b'\x03\x02\x01\x06\x05\x04\x09\x08\x07',
456
+ 'rgb_align2': b'\x01\x02\x03\x00\x04\x05\x06\x00\x07\x08\x09\x00',
457
+ 'bgr_align2': b'\x03\x02\x01\x00\x06\x05\x04\x00\x09\x08\x07\x00',
458
+ 'rgb_align4': b'\x01\x02\x03\x00\x04\x05\x06\x00\x07\x08\x09\x00',
459
+ 'bgr_align4': b'\x03\x02\x01\x00\x06\x05\x04\x00\x09\x08\x07\x00',
460
+ 'rgb_align8': (b'\x01\x02\x03' + pad5 +
461
+ b'\x04\x05\x06' + pad5 +
462
+ b'\x07\x08\x09' + pad5),
463
+ 'bgr_align8': (b'\x03\x02\x01' + pad5 +
464
+ b'\x06\x05\x04' + pad5 +
465
+ b'\x09\x08\x07' + pad5),
466
+ }
467
+ src = correct.get
468
+ rgba = src('rgba')
469
+ self.assertEqual(rgba_to(rgba, 'rgb', 1, 3, 4), src('rgb_align2'))
470
+ self.assertEqual(rgba_to(rgba, 'bgr', 1, 3, 4), src('bgr_align2'))
471
+ self.assertEqual(rgba_to(rgba, 'rgb', 1, 3, None), src('rgb_align4'))
472
+ self.assertEqual(rgba_to(rgba, 'bgr', 1, 3, None), src('bgr_align4'))
473
+ self.assertEqual(rgba_to(rgba, 'rgb', 1, 3, 0), src('rgb_raw'))
474
+ self.assertEqual(rgba_to(rgba, 'bgr', 1, 3, 0), src('bgr_raw'))
475
+ self.assertEqual(rgba_to(rgba, 'rgb', 1, 3, 8), src('rgb_align8'))
476
+ self.assertEqual(rgba_to(rgba, 'bgr', 1, 3, 8), src('bgr_align8'))
477
+
478
+
479
+ if __name__ == '__main__':
480
+ accept_filter = ['ImageLoader{}'.format(x) for x in sys.argv[1:]]
481
+ if accept_filter:
482
+ LOADERS = {x: LOADERS[x] for x in accept_filter}
483
+
484
+ DEBUG = True
485
+ unittest.main(argv=sys.argv[:1])
@@ -0,0 +1,42 @@
1
+
2
+ import unittest
3
+
4
+
5
+ class InvalidLangTestCase(unittest.TestCase):
6
+
7
+ def test_invalid_childname(self):
8
+ from kivy.lang import Builder, ParserException
9
+ from kivy.factory import FactoryException
10
+ try:
11
+ Builder.load_string('''
12
+ Widget:
13
+ FloatLayout:
14
+ size: self.parent.size
15
+ Button:
16
+ text: "text"
17
+ size_hint:(0.1, 0.1)
18
+ pos_hint:{'x':0.45, 'y':0.45}
19
+ thecursor.Cursor:
20
+ ''')
21
+ self.fail('Invalid children name')
22
+ except ParserException:
23
+ pass
24
+ except FactoryException:
25
+ pass
26
+
27
+ def test_invalid_childname_before(self):
28
+ from kivy.lang import Builder, ParserException
29
+ try:
30
+ Builder.load_string('''
31
+ Widget:
32
+ thecursor.Cursor:
33
+ FloatLayout:
34
+ size: self.parent.size
35
+ Button:
36
+ text: "text"
37
+ size_hint:(0.1, 0.1)
38
+ pos_hint:{'x':0.45, 'y':0.45}
39
+ ''')
40
+ self.fail('Invalid children name')
41
+ except ParserException:
42
+ pass