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,999 @@
1
+ # found a way to include it more easily.
2
+ '''
3
+ SDL2 Window
4
+ ===========
5
+
6
+ Windowing provider directly based on our own wrapped version of SDL.
7
+
8
+ TODO:
9
+ - fix keys
10
+ - support scrolling
11
+ - clean code
12
+ - manage correctly all sdl events
13
+
14
+ '''
15
+
16
+ __all__ = ('WindowSDL', )
17
+
18
+ from os.path import join
19
+ import sys
20
+ from typing import Optional
21
+ from kivy import kivy_data_dir
22
+ from kivy.logger import Logger
23
+ from kivy.base import EventLoop
24
+ from kivy.clock import Clock
25
+ from kivy.config import Config
26
+ from kivy.core.window import WindowBase
27
+ try:
28
+ from kivy.core.window._window_sdl2 import _WindowSDL2Storage
29
+ except ImportError:
30
+ from kivy.core import handle_win_lib_import_error
31
+ handle_win_lib_import_error(
32
+ 'window', 'sdl2', 'kivy.core.window._window_sdl2')
33
+ raise
34
+ from kivy.input.provider import MotionEventProvider
35
+ from kivy.input.motionevent import MotionEvent
36
+ from kivy.resources import resource_find
37
+ from kivy.utils import platform, deprecated
38
+ from kivy.compat import unichr
39
+ from collections import deque
40
+
41
+
42
+ # SDL_keycode.h, https://wiki.libsdl.org/SDL_Keymod
43
+ KMOD_NONE = 0x0000
44
+ KMOD_LSHIFT = 0x0001
45
+ KMOD_RSHIFT = 0x0002
46
+ KMOD_LCTRL = 0x0040
47
+ KMOD_RCTRL = 0x0080
48
+ KMOD_LALT = 0x0100
49
+ KMOD_RALT = 0x0200
50
+ KMOD_LGUI = 0x0400
51
+ KMOD_RGUI = 0x0800
52
+ KMOD_NUM = 0x1000
53
+ KMOD_CAPS = 0x2000
54
+ KMOD_MODE = 0x4000
55
+
56
+ SDLK_SHIFTL = 1073742049
57
+ SDLK_SHIFTR = 1073742053
58
+ SDLK_LCTRL = 1073742048
59
+ SDLK_RCTRL = 1073742052
60
+ SDLK_LALT = 1073742050
61
+ SDLK_RALT = 1073742054
62
+ SDLK_LEFT = 1073741904
63
+ SDLK_RIGHT = 1073741903
64
+ SDLK_UP = 1073741906
65
+ SDLK_DOWN = 1073741905
66
+ SDLK_HOME = 1073741898
67
+ SDLK_END = 1073741901
68
+ SDLK_PAGEUP = 1073741899
69
+ SDLK_PAGEDOWN = 1073741902
70
+ SDLK_SUPER = 1073742051
71
+ SDLK_CAPS = 1073741881
72
+ SDLK_INSERT = 1073741897
73
+ SDLK_KEYPADNUM = 1073741907
74
+ SDLK_KP_DIVIDE = 1073741908
75
+ SDLK_KP_MULTIPLY = 1073741909
76
+ SDLK_KP_MINUS = 1073741910
77
+ SDLK_KP_PLUS = 1073741911
78
+ SDLK_KP_ENTER = 1073741912
79
+ SDLK_KP_1 = 1073741913
80
+ SDLK_KP_2 = 1073741914
81
+ SDLK_KP_3 = 1073741915
82
+ SDLK_KP_4 = 1073741916
83
+ SDLK_KP_5 = 1073741917
84
+ SDLK_KP_6 = 1073741918
85
+ SDLK_KP_7 = 1073741919
86
+ SDLK_KP_8 = 1073741920
87
+ SDLK_KP_9 = 1073741921
88
+ SDLK_KP_0 = 1073741922
89
+ SDLK_KP_DOT = 1073741923
90
+ SDLK_F1 = 1073741882
91
+ SDLK_F2 = 1073741883
92
+ SDLK_F3 = 1073741884
93
+ SDLK_F4 = 1073741885
94
+ SDLK_F5 = 1073741886
95
+ SDLK_F6 = 1073741887
96
+ SDLK_F7 = 1073741888
97
+ SDLK_F8 = 1073741889
98
+ SDLK_F9 = 1073741890
99
+ SDLK_F10 = 1073741891
100
+ SDLK_F11 = 1073741892
101
+ SDLK_F12 = 1073741893
102
+ SDLK_F13 = 1073741894
103
+ SDLK_F14 = 1073741895
104
+ SDLK_F15 = 1073741896
105
+
106
+
107
+ class SDL2MotionEvent(MotionEvent):
108
+
109
+ def __init__(self, *args, **kwargs):
110
+ kwargs.setdefault('is_touch', True)
111
+ kwargs.setdefault('type_id', 'touch')
112
+ super().__init__(*args, **kwargs)
113
+ self.profile = ('pos', 'pressure')
114
+
115
+ def depack(self, args):
116
+ self.sx, self.sy, self.pressure = args
117
+ super().depack(args)
118
+
119
+
120
+ class SDL2MotionEventProvider(MotionEventProvider):
121
+ win = None
122
+ q = deque()
123
+ touchmap = {}
124
+
125
+ def update(self, dispatch_fn):
126
+ touchmap = self.touchmap
127
+ while True:
128
+ try:
129
+ value = self.q.pop()
130
+ except IndexError:
131
+ return
132
+
133
+ action, fid, x, y, pressure = value
134
+ y = 1 - y
135
+ if fid not in touchmap:
136
+ touchmap[fid] = me = SDL2MotionEvent(
137
+ 'sdl', fid, (x, y, pressure)
138
+ )
139
+ else:
140
+ me = touchmap[fid]
141
+ me.move((x, y, pressure))
142
+ if action == 'fingerdown':
143
+ dispatch_fn('begin', me)
144
+ elif action == 'fingerup':
145
+ me.update_time_end()
146
+ dispatch_fn('end', me)
147
+ del touchmap[fid]
148
+ else:
149
+ dispatch_fn('update', me)
150
+
151
+
152
+ class WindowSDL(WindowBase):
153
+
154
+ _win_dpi_watch: Optional['_WindowsSysDPIWatch'] = None
155
+
156
+ _do_resize_ev = None
157
+
158
+ managed_textinput = True
159
+
160
+ def __init__(self, **kwargs):
161
+ self._pause_loop = False
162
+ self._cursor_entered = False
163
+ self._drop_pos = None
164
+ self._win = _WindowSDL2Storage()
165
+ super(WindowSDL, self).__init__()
166
+ self.titlebar_widget = None
167
+ self._mouse_x = self._mouse_y = -1
168
+ self._meta_keys = (
169
+ KMOD_LCTRL, KMOD_RCTRL, KMOD_RSHIFT,
170
+ KMOD_LSHIFT, KMOD_RALT, KMOD_LALT, KMOD_LGUI,
171
+ KMOD_RGUI, KMOD_NUM, KMOD_CAPS, KMOD_MODE)
172
+ self.command_keys = {
173
+ 27: 'escape',
174
+ 9: 'tab',
175
+ 8: 'backspace',
176
+ 13: 'enter',
177
+ 127: 'del',
178
+ 271: 'enter',
179
+ 273: 'up',
180
+ 274: 'down',
181
+ 275: 'right',
182
+ 276: 'left',
183
+ 278: 'home',
184
+ 279: 'end',
185
+ 280: 'pgup',
186
+ 281: 'pgdown'}
187
+ self._mouse_buttons_down = set()
188
+ self.key_map = {SDLK_LEFT: 276, SDLK_RIGHT: 275, SDLK_UP: 273,
189
+ SDLK_DOWN: 274, SDLK_HOME: 278, SDLK_END: 279,
190
+ SDLK_PAGEDOWN: 281, SDLK_PAGEUP: 280, SDLK_SHIFTR: 303,
191
+ SDLK_SHIFTL: 304, SDLK_SUPER: 309, SDLK_LCTRL: 305,
192
+ SDLK_RCTRL: 306, SDLK_LALT: 308, SDLK_RALT: 307,
193
+ SDLK_CAPS: 301, SDLK_INSERT: 277, SDLK_F1: 282,
194
+ SDLK_F2: 283, SDLK_F3: 284, SDLK_F4: 285, SDLK_F5: 286,
195
+ SDLK_F6: 287, SDLK_F7: 288, SDLK_F8: 289, SDLK_F9: 290,
196
+ SDLK_F10: 291, SDLK_F11: 292, SDLK_F12: 293,
197
+ SDLK_F13: 294, SDLK_F14: 295, SDLK_F15: 296,
198
+ SDLK_KEYPADNUM: 300, SDLK_KP_DIVIDE: 267,
199
+ SDLK_KP_MULTIPLY: 268, SDLK_KP_MINUS: 269,
200
+ SDLK_KP_PLUS: 270, SDLK_KP_ENTER: 271,
201
+ SDLK_KP_DOT: 266, SDLK_KP_0: 256, SDLK_KP_1: 257,
202
+ SDLK_KP_2: 258, SDLK_KP_3: 259, SDLK_KP_4: 260,
203
+ SDLK_KP_5: 261, SDLK_KP_6: 262, SDLK_KP_7: 263,
204
+ SDLK_KP_8: 264, SDLK_KP_9: 265}
205
+ if platform == 'ios':
206
+ # XXX ios keyboard suck, when backspace is hit, the delete
207
+ # keycode is sent. fix it.
208
+ self.key_map[127] = 8
209
+ elif platform == 'android':
210
+ # map android back button to escape
211
+ self.key_map[1073742094] = 27
212
+
213
+ self.bind(minimum_width=self._set_minimum_size,
214
+ minimum_height=self._set_minimum_size)
215
+
216
+ self.bind(allow_screensaver=self._set_allow_screensaver)
217
+ self.bind(always_on_top=self._set_always_on_top)
218
+
219
+ def get_window_info(self):
220
+ return self._win.get_window_info()
221
+
222
+ def _set_minimum_size(self, *args):
223
+ minimum_width = self.minimum_width
224
+ minimum_height = self.minimum_height
225
+ if minimum_width and minimum_height:
226
+ self._win.set_minimum_size(minimum_width, minimum_height)
227
+ elif minimum_width or minimum_height:
228
+ Logger.warning(
229
+ 'Both Window.minimum_width and Window.minimum_height must be '
230
+ 'bigger than 0 for the size restriction to take effect.')
231
+
232
+ def _set_always_on_top(self, *args):
233
+ self._win.set_always_on_top(self.always_on_top)
234
+
235
+ def _set_allow_screensaver(self, *args):
236
+ self._win.set_allow_screensaver(self.allow_screensaver)
237
+
238
+ def _event_filter(self, action, *largs):
239
+ from kivy.app import App
240
+ if action == 'app_terminating':
241
+ EventLoop.quit = True
242
+
243
+ elif action == 'app_lowmemory':
244
+ self.dispatch('on_memorywarning')
245
+
246
+ elif action == 'app_willenterbackground':
247
+ from kivy.base import stopTouchApp
248
+ app = App.get_running_app()
249
+ if not app:
250
+ Logger.info('WindowSDL: No running App found, pause.')
251
+
252
+ elif not app.dispatch('on_pause'):
253
+ if platform == 'android':
254
+ Logger.info(
255
+ 'WindowSDL: App stopped, on_pause() returned False.')
256
+ from android import mActivity
257
+ mActivity.finishAndRemoveTask()
258
+ else:
259
+ Logger.info(
260
+ 'WindowSDL: App doesn\'t support pause mode, stop.')
261
+ stopTouchApp()
262
+ return 0
263
+
264
+ self._pause_loop = True
265
+
266
+ elif action == 'app_didenterforeground':
267
+ # on iOS, the did enter foreground is launched at the start
268
+ # of the application. in our case, we want it only when the app
269
+ # is resumed
270
+ if self._pause_loop:
271
+ self._pause_loop = False
272
+ app = App.get_running_app()
273
+ if app:
274
+ app.dispatch('on_resume')
275
+
276
+ elif action == 'windowresized':
277
+ self._size = largs
278
+ self._win.resize_window(*self._size)
279
+ # Force kivy to render the frame now, so that the canvas is drawn.
280
+ EventLoop.idle()
281
+
282
+ return 0
283
+
284
+ def create_window(self, *largs):
285
+ if self._fake_fullscreen:
286
+ if not self.borderless:
287
+ self.fullscreen = self._fake_fullscreen = False
288
+ elif not self.fullscreen or self.fullscreen == 'auto':
289
+ self.custom_titlebar = \
290
+ self.borderless = self._fake_fullscreen = False
291
+ elif self.custom_titlebar:
292
+ if platform == 'win':
293
+ # use custom behavior
294
+ # To handle aero snapping and rounded corners
295
+ self.borderless = False
296
+ if self.fullscreen == 'fake':
297
+ self.borderless = self._fake_fullscreen = True
298
+ Logger.warning("The 'fake' fullscreen option has been "
299
+ "deprecated, use Window.borderless or the "
300
+ "borderless Config option instead.")
301
+
302
+ if not self.initialized:
303
+ if self.position == 'auto':
304
+ pos = None, None
305
+ elif self.position == 'custom':
306
+ pos = self.left, self.top
307
+
308
+ # ensure we have an event filter
309
+ self._win.set_event_filter(self._event_filter)
310
+
311
+ # setup window
312
+ w, h = self.system_size
313
+ resizable = Config.getboolean('graphics', 'resizable')
314
+ state = (Config.get('graphics', 'window_state')
315
+ if self._is_desktop else None)
316
+ self.system_size = self._win.setup_window(
317
+ pos[0], pos[1], w, h, self.borderless,
318
+ self.fullscreen, resizable, state,
319
+ self.get_gl_backend_name())
320
+
321
+ # We don't have a density or dpi yet set, so let's ask for an update
322
+ self._update_density_and_dpi()
323
+
324
+ # never stay with a None pos, application using w.center
325
+ # will be fired.
326
+ self._pos = (0, 0)
327
+ self._set_minimum_size()
328
+ self._set_allow_screensaver()
329
+ self._set_always_on_top()
330
+
331
+ if state == 'hidden':
332
+ self._focus = False
333
+ else:
334
+ w, h = self.system_size
335
+ self._win.resize_window(w, h)
336
+ if platform == 'win':
337
+ if self.custom_titlebar:
338
+ # check dragging+resize or just dragging
339
+ if Config.getboolean('graphics', 'resizable'):
340
+ import win32con
341
+ import ctypes
342
+ self._win.set_border_state(False)
343
+ # make windows dispatch,
344
+ # WM_NCCALCSIZE explicitly
345
+ ctypes.windll.user32.SetWindowPos(
346
+ self._win.get_window_info().window,
347
+ win32con.HWND_TOP,
348
+ *self._win.get_window_pos(),
349
+ *self.system_size,
350
+ win32con.SWP_FRAMECHANGED
351
+ )
352
+ else:
353
+ self._win.set_border_state(True)
354
+ else:
355
+ self._win.set_border_state(self.borderless)
356
+ else:
357
+ self._win.set_border_state(self.borderless
358
+ or self.custom_titlebar)
359
+ self._win.set_fullscreen_mode(self.fullscreen)
360
+
361
+ super(WindowSDL, self).create_window()
362
+ # set mouse visibility
363
+ self._set_cursor_state(self.show_cursor)
364
+
365
+ if self.initialized:
366
+ return
367
+
368
+ # auto add input provider
369
+ Logger.info('Window: auto add sdl2 input provider')
370
+ SDL2MotionEventProvider.win = self
371
+ EventLoop.add_input_provider(SDL2MotionEventProvider('sdl', ''))
372
+
373
+ # set window icon before calling set_mode
374
+ try:
375
+ filename_icon = self.icon or Config.get('kivy', 'window_icon')
376
+ if filename_icon == '':
377
+ logo_size = 32
378
+ if platform == 'macosx':
379
+ logo_size = 512
380
+ elif platform == 'win':
381
+ logo_size = 64
382
+ filename_icon = 'kivy-icon-{}.png'.format(logo_size)
383
+ filename_icon = resource_find(
384
+ join(kivy_data_dir, 'logo', filename_icon))
385
+ self.set_icon(filename_icon)
386
+ except:
387
+ Logger.exception('Window: cannot set icon')
388
+
389
+ if platform == 'win' and self._win_dpi_watch is None:
390
+ self._win_dpi_watch = _WindowsSysDPIWatch(window=self)
391
+ self._win_dpi_watch.start()
392
+
393
+ def _update_density_and_dpi(self):
394
+ if platform == 'win':
395
+ from ctypes import windll
396
+ self._density = 1.
397
+ try:
398
+ hwnd = windll.user32.GetActiveWindow()
399
+ self.dpi = float(windll.user32.GetDpiForWindow(hwnd))
400
+ self._density = self.dpi / 96
401
+ except AttributeError:
402
+ pass
403
+ else:
404
+ self._density = self._win._get_gl_size()[0] / self._size[0]
405
+ if self._is_desktop:
406
+ self.dpi = self._density * 96.
407
+
408
+ def close(self):
409
+ self._win.teardown_window()
410
+ super(WindowSDL, self).close()
411
+ if self._win_dpi_watch is not None:
412
+ self._win_dpi_watch.stop()
413
+ self._win_dpi_watch = None
414
+
415
+ self.initialized = False
416
+
417
+ def maximize(self):
418
+ if self._is_desktop:
419
+ self._win.maximize_window()
420
+ else:
421
+ Logger.warning('Window: maximize() is used only on desktop OSes.')
422
+
423
+ def minimize(self):
424
+ if self._is_desktop:
425
+ self._win.minimize_window()
426
+ else:
427
+ Logger.warning('Window: minimize() is used only on desktop OSes.')
428
+
429
+ def restore(self):
430
+ if self._is_desktop:
431
+ self._win.restore_window()
432
+ else:
433
+ Logger.warning('Window: restore() is used only on desktop OSes.')
434
+
435
+ def hide(self):
436
+ if self._is_desktop:
437
+ self._win.hide_window()
438
+ else:
439
+ Logger.warning('Window: hide() is used only on desktop OSes.')
440
+
441
+ def show(self):
442
+ if self._is_desktop:
443
+ self._win.show_window()
444
+ else:
445
+ Logger.warning('Window: show() is used only on desktop OSes.')
446
+
447
+ def raise_window(self):
448
+ if self._is_desktop:
449
+ self._win.raise_window()
450
+ else:
451
+ Logger.warning('Window: show() is used only on desktop OSes.')
452
+
453
+ def set_title(self, title):
454
+ self._win.set_window_title(title)
455
+
456
+ def set_icon(self, filename):
457
+ self._win.set_window_icon(str(filename))
458
+
459
+ def screenshot(self, *largs, **kwargs):
460
+ filename = super(WindowSDL, self).screenshot(*largs, **kwargs)
461
+ if filename is None:
462
+ return
463
+
464
+ from kivy.graphics.opengl import glReadPixels, GL_RGB, GL_UNSIGNED_BYTE
465
+ width, height = self.size
466
+ data = glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE)
467
+ self._win.save_bytes_in_png(filename, data, width, height)
468
+ Logger.debug('Window: Screenshot saved at <%s>' % filename)
469
+ return filename
470
+
471
+ def flip(self):
472
+ self._win.flip()
473
+ super(WindowSDL, self).flip()
474
+
475
+ def set_system_cursor(self, cursor_name):
476
+ result = self._win.set_system_cursor(cursor_name)
477
+ return result
478
+
479
+ def _get_window_pos(self):
480
+ return self._win.get_window_pos()
481
+
482
+ def _set_window_pos(self, x, y):
483
+ self._win.set_window_pos(x, y)
484
+
485
+ def _get_window_opacity(self):
486
+ return self._win.get_window_opacity()
487
+
488
+ def _set_window_opacity(self, opacity):
489
+ if self.opacity != opacity:
490
+ return self._win.set_window_opacity(opacity)
491
+
492
+ # Transparent Window background
493
+ def _is_shaped(self):
494
+ return self._win.is_window_shaped()
495
+
496
+ def _set_shape(self, shape_image, mode='default',
497
+ cutoff=False, color_key=None):
498
+ modes = ('default', 'binalpha', 'reversebinalpha', 'colorkey')
499
+ color_key = color_key or (0, 0, 0, 1)
500
+ if mode not in modes:
501
+ Logger.warning(
502
+ 'Window: shape mode can be only '
503
+ '{}'.format(', '.join(modes))
504
+ )
505
+ return
506
+ if not isinstance(color_key, (tuple, list)):
507
+ return
508
+ if len(color_key) not in (3, 4):
509
+ return
510
+ if len(color_key) == 3:
511
+ color_key = (color_key[0], color_key[1], color_key[2], 1)
512
+ Logger.warning(
513
+ 'Window: Shape color_key must be only tuple or list'
514
+ )
515
+ return
516
+ color_key = (
517
+ color_key[0] * 255,
518
+ color_key[1] * 255,
519
+ color_key[2] * 255,
520
+ color_key[3] * 255
521
+ )
522
+
523
+ assert cutoff in (1, 0)
524
+ shape_image = shape_image or Config.get('kivy', 'window_shape')
525
+ shape_image = resource_find(shape_image) or shape_image
526
+ self._win.set_shape(shape_image, mode, cutoff, color_key)
527
+
528
+ def _get_shaped_mode(self):
529
+ return self._win.get_shaped_mode()
530
+
531
+ def _set_shaped_mode(self, value):
532
+ self._set_shape(
533
+ shape_image=self.shape_image,
534
+ mode=value, cutoff=self.shape_cutoff,
535
+ color_key=self.shape_color_key
536
+ )
537
+ return self._win.get_shaped_mode()
538
+ # twb end
539
+
540
+ def _set_cursor_state(self, value):
541
+ self._win._set_cursor_state(value)
542
+
543
+ def _fix_mouse_pos(self, x, y):
544
+ self.mouse_pos = (
545
+ x * self._density,
546
+ (self.system_size[1] - 1 - y) * self._density
547
+ )
548
+ return x, y
549
+
550
+ def mainloop(self):
551
+ # for android/iOS, we don't want to have any event nor executing our
552
+ # main loop while the pause is going on. This loop wait any event (not
553
+ # handled by the event filter), and remove them from the queue.
554
+ # Nothing happen during the pause on iOS, except gyroscope value sent
555
+ # over joystick. So it's safe.
556
+ while self._pause_loop:
557
+ self._win.wait_event()
558
+ if not self._pause_loop:
559
+ break
560
+ event = self._win.poll()
561
+ if event is None:
562
+ continue
563
+ # A drop is send while the app is still in pause.loop
564
+ # we need to dispatch it
565
+ action, args = event[0], event[1:]
566
+ if action.startswith('drop'):
567
+ self._dispatch_drop_event(action, args)
568
+ # app_terminating event might be received while the app is paused
569
+ # in this case EventLoop.quit will be set at _event_filter
570
+ elif EventLoop.quit:
571
+ return
572
+
573
+ while True:
574
+ event = self._win.poll()
575
+ if event is False:
576
+ break
577
+ if event is None:
578
+ continue
579
+
580
+ action, args = event[0], event[1:]
581
+ if action == 'quit':
582
+ if self.dispatch('on_request_close'):
583
+ continue
584
+ EventLoop.quit = True
585
+ break
586
+
587
+ elif action in ('fingermotion', 'fingerdown', 'fingerup'):
588
+ # for finger, pass the raw event to SDL motion event provider
589
+ # XXX this is problematic. On OSX, it generates touches with 0,
590
+ # 0 coordinates, at the same times as mouse. But it works.
591
+ # We have a conflict of using either the mouse or the finger.
592
+ # Right now, we have no mechanism that we could use to know
593
+ # which is the preferred one for the application.
594
+ if platform in ('ios', 'android'):
595
+ SDL2MotionEventProvider.q.appendleft(event)
596
+ pass
597
+
598
+ elif action == 'mousemotion':
599
+ x, y = args
600
+ x, y = self._fix_mouse_pos(x, y)
601
+ self._mouse_x = x
602
+ self._mouse_y = y
603
+ if not self._cursor_entered:
604
+ self._cursor_entered = True
605
+ self.dispatch('on_cursor_enter')
606
+ # don't dispatch motion if no button are pressed
607
+ if len(self._mouse_buttons_down) == 0:
608
+ continue
609
+ self._mouse_meta = self.modifiers
610
+ self.dispatch('on_mouse_move', x, y, self.modifiers)
611
+
612
+ elif action in ('mousebuttondown', 'mousebuttonup'):
613
+ x, y, button = args
614
+ x, y = self._fix_mouse_pos(x, y)
615
+ self._mouse_x = x
616
+ self._mouse_y = y
617
+ if not self._cursor_entered:
618
+ self._cursor_entered = True
619
+ self.dispatch('on_cursor_enter')
620
+ btn = 'left'
621
+ if button == 3:
622
+ btn = 'right'
623
+ elif button == 2:
624
+ btn = 'middle'
625
+ elif button == 4:
626
+ btn = "mouse4"
627
+ elif button == 5:
628
+ btn = "mouse5"
629
+ eventname = 'on_mouse_down'
630
+ self._mouse_buttons_down.add(button)
631
+ if action == 'mousebuttonup':
632
+ eventname = 'on_mouse_up'
633
+ self._mouse_buttons_down.remove(button)
634
+ self.dispatch(eventname, x, y, btn, self.modifiers)
635
+ elif action.startswith('mousewheel'):
636
+ x, y = self._win.get_relative_mouse_pos()
637
+ if not self._collide_and_dispatch_cursor_enter(x, y):
638
+ # Ignore if the cursor position is on the window title bar
639
+ # or on its edges
640
+ continue
641
+ self._update_modifiers()
642
+ x, y, button = args
643
+ btn = 'scrolldown'
644
+ if action.endswith('up'):
645
+ btn = 'scrollup'
646
+ elif action.endswith('right'):
647
+ btn = 'scrollright'
648
+ elif action.endswith('left'):
649
+ btn = 'scrollleft'
650
+
651
+ self._mouse_meta = self.modifiers
652
+ self._mouse_btn = btn
653
+ # times = x if y == 0 else y
654
+ # times = min(abs(times), 100)
655
+ # for k in range(times):
656
+ self._mouse_down = True
657
+ self.dispatch('on_mouse_down',
658
+ self._mouse_x, self._mouse_y, btn, self.modifiers)
659
+ self._mouse_down = False
660
+ self.dispatch('on_mouse_up',
661
+ self._mouse_x, self._mouse_y, btn, self.modifiers)
662
+
663
+ elif action.startswith('drop'):
664
+ self._dispatch_drop_event(action, args)
665
+ # video resize
666
+ elif action == 'windowresized':
667
+ self._size = self._win.window_size
668
+ # don't use trigger here, we want to delay the resize event
669
+ ev = self._do_resize_ev
670
+ if ev is None:
671
+ ev = Clock.schedule_once(self._do_resize, .1)
672
+ self._do_resize_ev = ev
673
+ else:
674
+ ev()
675
+ elif action == 'windowdisplaychanged':
676
+ Logger.info(f"WindowSDL: Window is now on display {args[0]}")
677
+
678
+ # The display has changed, so the density and dpi
679
+ # may have changed too.
680
+ self._update_density_and_dpi()
681
+
682
+ elif action == 'windowmoved':
683
+ self.dispatch('on_move')
684
+
685
+ elif action == 'windowrestored':
686
+ self.dispatch('on_restore')
687
+ self.canvas.ask_update()
688
+
689
+ elif action == 'windowexposed':
690
+ self.canvas.ask_update()
691
+
692
+ elif action == 'windowminimized':
693
+ self.dispatch('on_minimize')
694
+ if Config.getboolean('kivy', 'pause_on_minimize'):
695
+ self.do_pause()
696
+
697
+ elif action == 'windowmaximized':
698
+ self.dispatch('on_maximize')
699
+
700
+ elif action == 'windowhidden':
701
+ self.dispatch('on_hide')
702
+
703
+ elif action == 'windowshown':
704
+ self.dispatch('on_show')
705
+
706
+ elif action == 'windowfocusgained':
707
+ self._focus = True
708
+
709
+ elif action == 'windowfocuslost':
710
+ self._focus = False
711
+
712
+ elif action == 'windowenter':
713
+ x, y = self._win.get_relative_mouse_pos()
714
+ self._collide_and_dispatch_cursor_enter(x, y)
715
+
716
+ elif action == 'windowleave':
717
+ self._cursor_entered = False
718
+ self.dispatch('on_cursor_leave')
719
+
720
+ elif action == 'joyaxismotion':
721
+ stickid, axisid, value = args
722
+ self.dispatch('on_joy_axis', stickid, axisid, value)
723
+ elif action == 'joyhatmotion':
724
+ stickid, hatid, value = args
725
+ self.dispatch('on_joy_hat', stickid, hatid, value)
726
+ elif action == 'joyballmotion':
727
+ stickid, ballid, xrel, yrel = args
728
+ self.dispatch('on_joy_ball', stickid, ballid, xrel, yrel)
729
+ elif action == 'joybuttondown':
730
+ stickid, buttonid = args
731
+ self.dispatch('on_joy_button_down', stickid, buttonid)
732
+ elif action == 'joybuttonup':
733
+ stickid, buttonid = args
734
+ self.dispatch('on_joy_button_up', stickid, buttonid)
735
+
736
+ elif action in ('keydown', 'keyup'):
737
+ mod, key, scancode, kstr = args
738
+
739
+ try:
740
+ key = self.key_map[key]
741
+ except KeyError:
742
+ pass
743
+
744
+ if action == 'keydown':
745
+ self._update_modifiers(mod, key)
746
+ else:
747
+ # ignore the key, it has been released
748
+ self._update_modifiers(mod)
749
+
750
+ # if mod in self._meta_keys:
751
+ if (key not in self._modifiers and
752
+ key not in self.command_keys.keys()):
753
+ try:
754
+ kstr_chr = unichr(key)
755
+ try:
756
+ # On android, there is no 'encoding' attribute.
757
+ # On other platforms, if stdout is redirected,
758
+ # 'encoding' may be None
759
+ encoding = getattr(sys.stdout, 'encoding',
760
+ 'utf8') or 'utf8'
761
+ kstr_chr.encode(encoding)
762
+ kstr = kstr_chr
763
+ except UnicodeError:
764
+ pass
765
+ except ValueError:
766
+ pass
767
+ # if 'shift' in self._modifiers and key\
768
+ # not in self.command_keys.keys():
769
+ # return
770
+
771
+ if action == 'keyup':
772
+ self.dispatch('on_key_up', key, scancode)
773
+ continue
774
+
775
+ # don't dispatch more key if down event is accepted
776
+ if self.dispatch('on_key_down', key,
777
+ scancode, kstr,
778
+ self.modifiers):
779
+ continue
780
+ self.dispatch('on_keyboard', key,
781
+ scancode, kstr,
782
+ self.modifiers)
783
+
784
+ elif action == 'textinput':
785
+ text = args[0]
786
+ self.dispatch('on_textinput', text)
787
+
788
+ elif action == 'textedit':
789
+ text = args[0]
790
+ self.dispatch('on_textedit', text)
791
+
792
+ # unhandled event !
793
+ else:
794
+ Logger.trace('WindowSDL: Unhandled event %s' % str(event))
795
+
796
+ def _dispatch_drop_event(self, action, args):
797
+ x, y = (0, 0) if self._drop_pos is None else self._drop_pos
798
+ if action == 'dropfile':
799
+ self.dispatch('on_drop_file', args[0], x, y)
800
+ elif action == 'droptext':
801
+ self.dispatch('on_drop_text', args[0], x, y)
802
+ elif action == 'dropbegin':
803
+ self._drop_pos = x, y = self._win.get_relative_mouse_pos()
804
+ self._collide_and_dispatch_cursor_enter(x, y)
805
+ self.dispatch('on_drop_begin', x, y)
806
+ elif action == 'dropend':
807
+ self._drop_pos = None
808
+ self.dispatch('on_drop_end', x, y)
809
+
810
+ def _collide_and_dispatch_cursor_enter(self, x, y):
811
+ # x, y are relative to window left/top position
812
+ w, h = self._win.window_size
813
+ if 0 <= x < w and 0 <= y < h:
814
+ self._mouse_x, self._mouse_y = self._fix_mouse_pos(x, y)
815
+ if not self._cursor_entered:
816
+ self._cursor_entered = True
817
+ self.dispatch('on_cursor_enter')
818
+ return True
819
+
820
+ def _do_resize(self, dt):
821
+ Logger.debug('Window: Resize window to %s' % str(self.size))
822
+ self._win.resize_window(*self._size)
823
+ self.dispatch('on_pre_resize', *self.size)
824
+
825
+ def do_pause(self):
826
+ # should go to app pause mode (desktop style)
827
+ from kivy.app import App
828
+ from kivy.base import stopTouchApp
829
+ app = App.get_running_app()
830
+ if not app:
831
+ Logger.info('WindowSDL: No running App found, pause.')
832
+ elif not app.dispatch('on_pause'):
833
+ Logger.info('WindowSDL: App doesn\'t support pause mode, stop.')
834
+ stopTouchApp()
835
+ return
836
+
837
+ # XXX FIXME wait for sdl resume
838
+ while True:
839
+ event = self._win.poll()
840
+ if event is False:
841
+ continue
842
+ if event is None:
843
+ continue
844
+
845
+ action, args = event[0], event[1:]
846
+ if action == 'quit':
847
+ EventLoop.quit = True
848
+ break
849
+ elif action == 'app_willenterforeground':
850
+ break
851
+ elif action == 'windowrestored':
852
+ break
853
+
854
+ if app:
855
+ app.dispatch('on_resume')
856
+
857
+ def _update_modifiers(self, mods=None, key=None):
858
+ if mods is None and key is None:
859
+ return
860
+ modifiers = set()
861
+
862
+ if mods is not None:
863
+ if mods & (KMOD_RSHIFT | KMOD_LSHIFT):
864
+ modifiers.add('shift')
865
+ if mods & (KMOD_RALT | KMOD_LALT | KMOD_MODE):
866
+ modifiers.add('alt')
867
+ if mods & (KMOD_RCTRL | KMOD_LCTRL):
868
+ modifiers.add('ctrl')
869
+ if mods & (KMOD_RGUI | KMOD_LGUI):
870
+ modifiers.add('meta')
871
+ if mods & KMOD_NUM:
872
+ modifiers.add('numlock')
873
+ if mods & KMOD_CAPS:
874
+ modifiers.add('capslock')
875
+
876
+ if key is not None:
877
+ if key in (KMOD_RSHIFT, KMOD_LSHIFT):
878
+ modifiers.add('shift')
879
+ if key in (KMOD_RALT, KMOD_LALT, KMOD_MODE):
880
+ modifiers.add('alt')
881
+ if key in (KMOD_RCTRL, KMOD_LCTRL):
882
+ modifiers.add('ctrl')
883
+ if key in (KMOD_RGUI, KMOD_LGUI):
884
+ modifiers.add('meta')
885
+ if key == KMOD_NUM:
886
+ modifiers.add('numlock')
887
+ if key == KMOD_CAPS:
888
+ modifiers.add('capslock')
889
+
890
+ self._modifiers = list(modifiers)
891
+ return
892
+
893
+ def request_keyboard(
894
+ self, callback, target, input_type='text', keyboard_suggestions=True
895
+ ):
896
+ self._sdl_keyboard = super(WindowSDL, self).\
897
+ request_keyboard(
898
+ callback, target, input_type, keyboard_suggestions
899
+ )
900
+ self._win.show_keyboard(
901
+ self._system_keyboard,
902
+ self.softinput_mode,
903
+ input_type,
904
+ keyboard_suggestions,
905
+ )
906
+ Clock.schedule_interval(self._check_keyboard_shown, 1 / 5.)
907
+ return self._sdl_keyboard
908
+
909
+ def release_keyboard(self, *largs):
910
+ super(WindowSDL, self).release_keyboard(*largs)
911
+ self._win.hide_keyboard()
912
+ self._sdl_keyboard = None
913
+ return True
914
+
915
+ def _check_keyboard_shown(self, dt):
916
+ if self._sdl_keyboard is None:
917
+ return False
918
+ if not self._win.is_keyboard_shown():
919
+ self._sdl_keyboard.release()
920
+
921
+ def map_key(self, original_key, new_key):
922
+ self.key_map[original_key] = new_key
923
+
924
+ def unmap_key(self, key):
925
+ if key in self.key_map:
926
+ del self.key_map[key]
927
+
928
+ def grab_mouse(self):
929
+ self._win.grab_mouse(True)
930
+
931
+ def ungrab_mouse(self):
932
+ self._win.grab_mouse(False)
933
+
934
+ def set_custom_titlebar(self, titlebar_widget):
935
+ if not self.custom_titlebar:
936
+ Logger.warning("Window: Window.custom_titlebar not set to True… "
937
+ "can't set custom titlebar")
938
+ return
939
+ self.titlebar_widget = titlebar_widget
940
+ return self._win.set_custom_titlebar(self.titlebar_widget) == 0
941
+
942
+
943
+ class _WindowsSysDPIWatch:
944
+
945
+ hwnd = None
946
+
947
+ new_windProc = None
948
+
949
+ old_windProc = None
950
+
951
+ window: WindowBase = None
952
+
953
+ def __init__(self, window: WindowBase):
954
+ self.window = window
955
+
956
+ def start(self):
957
+ from kivy.input.providers.wm_common import WNDPROC, \
958
+ SetWindowLong_WndProc_wrapper
959
+ from ctypes import windll
960
+
961
+ self.hwnd = windll.user32.GetActiveWindow()
962
+
963
+ # inject our own handler to handle messages before window manager
964
+ self.new_windProc = WNDPROC(self._wnd_proc)
965
+ self.old_windProc = SetWindowLong_WndProc_wrapper(
966
+ self.hwnd, self.new_windProc)
967
+
968
+ def stop(self):
969
+ from kivy.input.providers.wm_common import \
970
+ SetWindowLong_WndProc_wrapper
971
+
972
+ if self.hwnd is None:
973
+ return
974
+
975
+ self.new_windProc = SetWindowLong_WndProc_wrapper(
976
+ self.hwnd, self.old_windProc)
977
+ self.hwnd = self.new_windProc = self.old_windProc = None
978
+
979
+ def _wnd_proc(self, hwnd, msg, wParam, lParam):
980
+ from kivy.input.providers.wm_common import WM_DPICHANGED, WM_NCCALCSIZE
981
+ from ctypes import windll
982
+
983
+ if msg == WM_DPICHANGED:
984
+
985
+ def clock_callback(*args):
986
+ if x_dpi != y_dpi:
987
+ raise ValueError(
988
+ 'Can only handle DPI that are same for x and y')
989
+
990
+ self.window.dpi = x_dpi
991
+
992
+ x_dpi = wParam & 0xFFFF
993
+ y_dpi = wParam >> 16
994
+ Clock.schedule_once(clock_callback, -1)
995
+ elif Config.getboolean('graphics', 'resizable') \
996
+ and msg == WM_NCCALCSIZE and self.window.custom_titlebar:
997
+ return 0
998
+ return windll.user32.CallWindowProcW(
999
+ self.old_windProc, hwnd, msg, wParam, lParam)