vispy 0.15.0__cp313-cp313-macosx_11_0_arm64.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.

Potentially problematic release.


This version of vispy might be problematic. Click here for more details.

Files changed (521) hide show
  1. vispy/__init__.py +33 -0
  2. vispy/app/__init__.py +15 -0
  3. vispy/app/_default_app.py +76 -0
  4. vispy/app/_detect_eventloop.py +148 -0
  5. vispy/app/application.py +263 -0
  6. vispy/app/backends/__init__.py +52 -0
  7. vispy/app/backends/_egl.py +264 -0
  8. vispy/app/backends/_glfw.py +513 -0
  9. vispy/app/backends/_jupyter_rfb.py +278 -0
  10. vispy/app/backends/_offscreen_util.py +121 -0
  11. vispy/app/backends/_osmesa.py +235 -0
  12. vispy/app/backends/_pyglet.py +451 -0
  13. vispy/app/backends/_pyqt4.py +36 -0
  14. vispy/app/backends/_pyqt5.py +36 -0
  15. vispy/app/backends/_pyqt6.py +40 -0
  16. vispy/app/backends/_pyside.py +37 -0
  17. vispy/app/backends/_pyside2.py +52 -0
  18. vispy/app/backends/_pyside6.py +53 -0
  19. vispy/app/backends/_qt.py +1003 -0
  20. vispy/app/backends/_sdl2.py +444 -0
  21. vispy/app/backends/_template.py +244 -0
  22. vispy/app/backends/_test.py +8 -0
  23. vispy/app/backends/_tk.py +800 -0
  24. vispy/app/backends/_wx.py +476 -0
  25. vispy/app/backends/tests/__init__.py +0 -0
  26. vispy/app/backends/tests/test_offscreen_util.py +52 -0
  27. vispy/app/backends/tests/test_rfb.py +77 -0
  28. vispy/app/base.py +294 -0
  29. vispy/app/canvas.py +828 -0
  30. vispy/app/qt.py +92 -0
  31. vispy/app/tests/__init__.py +0 -0
  32. vispy/app/tests/qt-designer.ui +58 -0
  33. vispy/app/tests/test_app.py +442 -0
  34. vispy/app/tests/test_backends.py +164 -0
  35. vispy/app/tests/test_canvas.py +122 -0
  36. vispy/app/tests/test_context.py +92 -0
  37. vispy/app/tests/test_qt.py +47 -0
  38. vispy/app/tests/test_simultaneous.py +134 -0
  39. vispy/app/timer.py +174 -0
  40. vispy/color/__init__.py +17 -0
  41. vispy/color/_color_dict.py +193 -0
  42. vispy/color/color_array.py +447 -0
  43. vispy/color/color_space.py +181 -0
  44. vispy/color/colormap.py +1213 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +378 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1522 -0
  50. vispy/ext/cubehelix.py +138 -0
  51. vispy/ext/egl.py +375 -0
  52. vispy/ext/fontconfig.py +118 -0
  53. vispy/ext/gdi32plus.py +206 -0
  54. vispy/ext/osmesa.py +105 -0
  55. vispy/geometry/__init__.py +23 -0
  56. vispy/geometry/_triangulation_debugger.py +171 -0
  57. vispy/geometry/calculations.py +162 -0
  58. vispy/geometry/curves.py +399 -0
  59. vispy/geometry/generation.py +643 -0
  60. vispy/geometry/isocurve.py +175 -0
  61. vispy/geometry/isosurface.py +465 -0
  62. vispy/geometry/meshdata.py +700 -0
  63. vispy/geometry/normals.py +78 -0
  64. vispy/geometry/parametric.py +56 -0
  65. vispy/geometry/polygon.py +137 -0
  66. vispy/geometry/rect.py +210 -0
  67. vispy/geometry/tests/__init__.py +0 -0
  68. vispy/geometry/tests/test_calculations.py +23 -0
  69. vispy/geometry/tests/test_generation.py +56 -0
  70. vispy/geometry/tests/test_meshdata.py +106 -0
  71. vispy/geometry/tests/test_triangulation.py +594 -0
  72. vispy/geometry/torusknot.py +142 -0
  73. vispy/geometry/triangulation.py +876 -0
  74. vispy/gloo/__init__.py +56 -0
  75. vispy/gloo/buffer.py +505 -0
  76. vispy/gloo/context.py +272 -0
  77. vispy/gloo/framebuffer.py +257 -0
  78. vispy/gloo/gl/__init__.py +234 -0
  79. vispy/gloo/gl/_constants.py +332 -0
  80. vispy/gloo/gl/_es2.py +986 -0
  81. vispy/gloo/gl/_gl2.py +1365 -0
  82. vispy/gloo/gl/_proxy.py +499 -0
  83. vispy/gloo/gl/_pyopengl2.py +362 -0
  84. vispy/gloo/gl/dummy.py +24 -0
  85. vispy/gloo/gl/es2.py +62 -0
  86. vispy/gloo/gl/gl2.py +98 -0
  87. vispy/gloo/gl/glplus.py +168 -0
  88. vispy/gloo/gl/pyopengl2.py +97 -0
  89. vispy/gloo/gl/tests/__init__.py +0 -0
  90. vispy/gloo/gl/tests/test_basics.py +282 -0
  91. vispy/gloo/gl/tests/test_functionality.py +568 -0
  92. vispy/gloo/gl/tests/test_names.py +246 -0
  93. vispy/gloo/gl/tests/test_use.py +71 -0
  94. vispy/gloo/glir.py +1824 -0
  95. vispy/gloo/globject.py +101 -0
  96. vispy/gloo/preprocessor.py +67 -0
  97. vispy/gloo/program.py +543 -0
  98. vispy/gloo/tests/__init__.py +0 -0
  99. vispy/gloo/tests/test_buffer.py +558 -0
  100. vispy/gloo/tests/test_context.py +119 -0
  101. vispy/gloo/tests/test_framebuffer.py +195 -0
  102. vispy/gloo/tests/test_glir.py +307 -0
  103. vispy/gloo/tests/test_globject.py +35 -0
  104. vispy/gloo/tests/test_program.py +302 -0
  105. vispy/gloo/tests/test_texture.py +732 -0
  106. vispy/gloo/tests/test_use_gloo.py +187 -0
  107. vispy/gloo/tests/test_util.py +60 -0
  108. vispy/gloo/tests/test_wrappers.py +261 -0
  109. vispy/gloo/texture.py +1046 -0
  110. vispy/gloo/util.py +129 -0
  111. vispy/gloo/wrappers.py +762 -0
  112. vispy/glsl/__init__.py +42 -0
  113. vispy/glsl/antialias/antialias.glsl +7 -0
  114. vispy/glsl/antialias/cap-butt.glsl +31 -0
  115. vispy/glsl/antialias/cap-round.glsl +29 -0
  116. vispy/glsl/antialias/cap-square.glsl +30 -0
  117. vispy/glsl/antialias/cap-triangle-in.glsl +30 -0
  118. vispy/glsl/antialias/cap-triangle-out.glsl +30 -0
  119. vispy/glsl/antialias/cap.glsl +67 -0
  120. vispy/glsl/antialias/caps.glsl +67 -0
  121. vispy/glsl/antialias/filled.glsl +50 -0
  122. vispy/glsl/antialias/outline.glsl +40 -0
  123. vispy/glsl/antialias/stroke.glsl +43 -0
  124. vispy/glsl/arrowheads/angle.glsl +99 -0
  125. vispy/glsl/arrowheads/arrowheads.frag +60 -0
  126. vispy/glsl/arrowheads/arrowheads.glsl +12 -0
  127. vispy/glsl/arrowheads/arrowheads.vert +83 -0
  128. vispy/glsl/arrowheads/curved.glsl +48 -0
  129. vispy/glsl/arrowheads/inhibitor.glsl +26 -0
  130. vispy/glsl/arrowheads/stealth.glsl +46 -0
  131. vispy/glsl/arrowheads/triangle.glsl +97 -0
  132. vispy/glsl/arrowheads/util.glsl +13 -0
  133. vispy/glsl/arrows/angle-30.glsl +12 -0
  134. vispy/glsl/arrows/angle-60.glsl +12 -0
  135. vispy/glsl/arrows/angle-90.glsl +12 -0
  136. vispy/glsl/arrows/arrow.frag +39 -0
  137. vispy/glsl/arrows/arrow.vert +49 -0
  138. vispy/glsl/arrows/arrows.glsl +17 -0
  139. vispy/glsl/arrows/common.glsl +187 -0
  140. vispy/glsl/arrows/curved.glsl +63 -0
  141. vispy/glsl/arrows/stealth.glsl +50 -0
  142. vispy/glsl/arrows/triangle-30.glsl +12 -0
  143. vispy/glsl/arrows/triangle-60.glsl +12 -0
  144. vispy/glsl/arrows/triangle-90.glsl +12 -0
  145. vispy/glsl/arrows/util.glsl +98 -0
  146. vispy/glsl/build_spatial_filters.py +660 -0
  147. vispy/glsl/collections/agg-fast-path.frag +20 -0
  148. vispy/glsl/collections/agg-fast-path.vert +78 -0
  149. vispy/glsl/collections/agg-glyph.frag +60 -0
  150. vispy/glsl/collections/agg-glyph.vert +33 -0
  151. vispy/glsl/collections/agg-marker.frag +35 -0
  152. vispy/glsl/collections/agg-marker.vert +48 -0
  153. vispy/glsl/collections/agg-path.frag +55 -0
  154. vispy/glsl/collections/agg-path.vert +166 -0
  155. vispy/glsl/collections/agg-point.frag +21 -0
  156. vispy/glsl/collections/agg-point.vert +35 -0
  157. vispy/glsl/collections/agg-segment.frag +32 -0
  158. vispy/glsl/collections/agg-segment.vert +75 -0
  159. vispy/glsl/collections/marker.frag +38 -0
  160. vispy/glsl/collections/marker.vert +48 -0
  161. vispy/glsl/collections/raw-path.frag +15 -0
  162. vispy/glsl/collections/raw-path.vert +24 -0
  163. vispy/glsl/collections/raw-point.frag +14 -0
  164. vispy/glsl/collections/raw-point.vert +31 -0
  165. vispy/glsl/collections/raw-segment.frag +18 -0
  166. vispy/glsl/collections/raw-segment.vert +26 -0
  167. vispy/glsl/collections/raw-triangle.frag +13 -0
  168. vispy/glsl/collections/raw-triangle.vert +26 -0
  169. vispy/glsl/collections/sdf-glyph-ticks.vert +69 -0
  170. vispy/glsl/collections/sdf-glyph.frag +80 -0
  171. vispy/glsl/collections/sdf-glyph.vert +59 -0
  172. vispy/glsl/collections/tick-labels.vert +71 -0
  173. vispy/glsl/colormaps/autumn.glsl +20 -0
  174. vispy/glsl/colormaps/blues.glsl +20 -0
  175. vispy/glsl/colormaps/color-space.glsl +17 -0
  176. vispy/glsl/colormaps/colormaps.glsl +24 -0
  177. vispy/glsl/colormaps/cool.glsl +20 -0
  178. vispy/glsl/colormaps/fire.glsl +21 -0
  179. vispy/glsl/colormaps/gray.glsl +20 -0
  180. vispy/glsl/colormaps/greens.glsl +20 -0
  181. vispy/glsl/colormaps/hot.glsl +22 -0
  182. vispy/glsl/colormaps/ice.glsl +20 -0
  183. vispy/glsl/colormaps/icefire.glsl +23 -0
  184. vispy/glsl/colormaps/parse.py +40 -0
  185. vispy/glsl/colormaps/reds.glsl +20 -0
  186. vispy/glsl/colormaps/spring.glsl +20 -0
  187. vispy/glsl/colormaps/summer.glsl +20 -0
  188. vispy/glsl/colormaps/user.glsl +22 -0
  189. vispy/glsl/colormaps/util.glsl +41 -0
  190. vispy/glsl/colormaps/wheel.glsl +21 -0
  191. vispy/glsl/colormaps/winter.glsl +20 -0
  192. vispy/glsl/lines/agg.frag +320 -0
  193. vispy/glsl/lines/agg.vert +241 -0
  194. vispy/glsl/markers/arrow.glsl +12 -0
  195. vispy/glsl/markers/asterisk.glsl +16 -0
  196. vispy/glsl/markers/chevron.glsl +14 -0
  197. vispy/glsl/markers/clover.glsl +20 -0
  198. vispy/glsl/markers/club.glsl +31 -0
  199. vispy/glsl/markers/cross.glsl +17 -0
  200. vispy/glsl/markers/diamond.glsl +12 -0
  201. vispy/glsl/markers/disc.glsl +9 -0
  202. vispy/glsl/markers/ellipse.glsl +67 -0
  203. vispy/glsl/markers/hbar.glsl +9 -0
  204. vispy/glsl/markers/heart.glsl +15 -0
  205. vispy/glsl/markers/infinity.glsl +15 -0
  206. vispy/glsl/markers/marker-sdf.frag +74 -0
  207. vispy/glsl/markers/marker-sdf.vert +41 -0
  208. vispy/glsl/markers/marker.frag +36 -0
  209. vispy/glsl/markers/marker.vert +46 -0
  210. vispy/glsl/markers/markers.glsl +24 -0
  211. vispy/glsl/markers/pin.glsl +18 -0
  212. vispy/glsl/markers/ring.glsl +11 -0
  213. vispy/glsl/markers/spade.glsl +28 -0
  214. vispy/glsl/markers/square.glsl +10 -0
  215. vispy/glsl/markers/tag.glsl +11 -0
  216. vispy/glsl/markers/triangle.glsl +14 -0
  217. vispy/glsl/markers/vbar.glsl +9 -0
  218. vispy/glsl/math/circle-through-2-points.glsl +30 -0
  219. vispy/glsl/math/constants.glsl +48 -0
  220. vispy/glsl/math/double.glsl +114 -0
  221. vispy/glsl/math/functions.glsl +20 -0
  222. vispy/glsl/math/point-to-line-distance.glsl +31 -0
  223. vispy/glsl/math/point-to-line-projection.glsl +29 -0
  224. vispy/glsl/math/signed-line-distance.glsl +27 -0
  225. vispy/glsl/math/signed-segment-distance.glsl +30 -0
  226. vispy/glsl/misc/regular-grid.frag +244 -0
  227. vispy/glsl/misc/spatial-filters.frag +1407 -0
  228. vispy/glsl/misc/viewport-NDC.glsl +20 -0
  229. vispy/glsl/transforms/azimuthal-equal-area.glsl +32 -0
  230. vispy/glsl/transforms/azimuthal-equidistant.glsl +38 -0
  231. vispy/glsl/transforms/hammer.glsl +44 -0
  232. vispy/glsl/transforms/identity.glsl +6 -0
  233. vispy/glsl/transforms/identity_forward.glsl +23 -0
  234. vispy/glsl/transforms/identity_inverse.glsl +23 -0
  235. vispy/glsl/transforms/linear-scale.glsl +127 -0
  236. vispy/glsl/transforms/log-scale.glsl +126 -0
  237. vispy/glsl/transforms/mercator-transverse-forward.glsl +40 -0
  238. vispy/glsl/transforms/mercator-transverse-inverse.glsl +40 -0
  239. vispy/glsl/transforms/panzoom.glsl +10 -0
  240. vispy/glsl/transforms/polar.glsl +41 -0
  241. vispy/glsl/transforms/position.glsl +44 -0
  242. vispy/glsl/transforms/power-scale.glsl +139 -0
  243. vispy/glsl/transforms/projection.glsl +7 -0
  244. vispy/glsl/transforms/pvm.glsl +13 -0
  245. vispy/glsl/transforms/rotate.glsl +45 -0
  246. vispy/glsl/transforms/trackball.glsl +15 -0
  247. vispy/glsl/transforms/translate.glsl +35 -0
  248. vispy/glsl/transforms/transverse_mercator.glsl +38 -0
  249. vispy/glsl/transforms/viewport-clipping.glsl +14 -0
  250. vispy/glsl/transforms/viewport-transform.glsl +16 -0
  251. vispy/glsl/transforms/viewport.glsl +50 -0
  252. vispy/glsl/transforms/x.glsl +24 -0
  253. vispy/glsl/transforms/y.glsl +19 -0
  254. vispy/glsl/transforms/z.glsl +14 -0
  255. vispy/io/__init__.py +20 -0
  256. vispy/io/_data/spatial-filters.npy +0 -0
  257. vispy/io/datasets.py +94 -0
  258. vispy/io/image.py +231 -0
  259. vispy/io/mesh.py +122 -0
  260. vispy/io/stl.py +167 -0
  261. vispy/io/tests/__init__.py +0 -0
  262. vispy/io/tests/test_image.py +47 -0
  263. vispy/io/tests/test_io.py +121 -0
  264. vispy/io/wavefront.py +350 -0
  265. vispy/plot/__init__.py +36 -0
  266. vispy/plot/fig.py +58 -0
  267. vispy/plot/plotwidget.py +522 -0
  268. vispy/plot/tests/__init__.py +0 -0
  269. vispy/plot/tests/test_plot.py +46 -0
  270. vispy/scene/__init__.py +43 -0
  271. vispy/scene/cameras/__init__.py +27 -0
  272. vispy/scene/cameras/_base.py +38 -0
  273. vispy/scene/cameras/arcball.py +105 -0
  274. vispy/scene/cameras/base_camera.py +551 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +311 -0
  278. vispy/scene/cameras/perspective.py +338 -0
  279. vispy/scene/cameras/tests/__init__.py +0 -0
  280. vispy/scene/cameras/tests/test_cameras.py +27 -0
  281. vispy/scene/cameras/tests/test_link.py +53 -0
  282. vispy/scene/cameras/tests/test_perspective.py +122 -0
  283. vispy/scene/cameras/turntable.py +183 -0
  284. vispy/scene/canvas.py +639 -0
  285. vispy/scene/events.py +85 -0
  286. vispy/scene/node.py +644 -0
  287. vispy/scene/subscene.py +20 -0
  288. vispy/scene/tests/__init__.py +0 -0
  289. vispy/scene/tests/test_canvas.py +119 -0
  290. vispy/scene/tests/test_node.py +142 -0
  291. vispy/scene/tests/test_visuals.py +141 -0
  292. vispy/scene/visuals.py +276 -0
  293. vispy/scene/widgets/__init__.py +18 -0
  294. vispy/scene/widgets/anchor.py +25 -0
  295. vispy/scene/widgets/axis.py +88 -0
  296. vispy/scene/widgets/colorbar.py +176 -0
  297. vispy/scene/widgets/console.py +351 -0
  298. vispy/scene/widgets/grid.py +509 -0
  299. vispy/scene/widgets/label.py +50 -0
  300. vispy/scene/widgets/tests/__init__.py +0 -0
  301. vispy/scene/widgets/tests/test_colorbar.py +47 -0
  302. vispy/scene/widgets/viewbox.py +199 -0
  303. vispy/scene/widgets/widget.py +478 -0
  304. vispy/testing/__init__.py +51 -0
  305. vispy/testing/_runners.py +448 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +494 -0
  308. vispy/testing/rendered_array_tester.py +85 -0
  309. vispy/testing/tests/__init__.py +0 -0
  310. vispy/testing/tests/test_testing.py +20 -0
  311. vispy/util/__init__.py +32 -0
  312. vispy/util/bunch.py +15 -0
  313. vispy/util/check_environment.py +57 -0
  314. vispy/util/config.py +490 -0
  315. vispy/util/dpi/__init__.py +19 -0
  316. vispy/util/dpi/_linux.py +69 -0
  317. vispy/util/dpi/_quartz.py +26 -0
  318. vispy/util/dpi/_win32.py +34 -0
  319. vispy/util/dpi/tests/__init__.py +0 -0
  320. vispy/util/dpi/tests/test_dpi.py +16 -0
  321. vispy/util/eq.py +41 -0
  322. vispy/util/event.py +774 -0
  323. vispy/util/fetching.py +276 -0
  324. vispy/util/filter.py +44 -0
  325. vispy/util/fonts/__init__.py +14 -0
  326. vispy/util/fonts/_freetype.py +73 -0
  327. vispy/util/fonts/_quartz.py +192 -0
  328. vispy/util/fonts/_triage.py +36 -0
  329. vispy/util/fonts/_vispy_fonts.py +20 -0
  330. vispy/util/fonts/_win32.py +105 -0
  331. vispy/util/fonts/data/OpenSans-Bold.ttf +0 -0
  332. vispy/util/fonts/data/OpenSans-BoldItalic.ttf +0 -0
  333. vispy/util/fonts/data/OpenSans-Italic.ttf +0 -0
  334. vispy/util/fonts/data/OpenSans-Regular.ttf +0 -0
  335. vispy/util/fonts/tests/__init__.py +0 -0
  336. vispy/util/fonts/tests/test_font.py +45 -0
  337. vispy/util/fourier.py +69 -0
  338. vispy/util/frozen.py +25 -0
  339. vispy/util/gallery_scraper.py +268 -0
  340. vispy/util/keys.py +91 -0
  341. vispy/util/logs.py +358 -0
  342. vispy/util/osmesa_gl.py +17 -0
  343. vispy/util/profiler.py +135 -0
  344. vispy/util/ptime.py +16 -0
  345. vispy/util/quaternion.py +229 -0
  346. vispy/util/svg/__init__.py +18 -0
  347. vispy/util/svg/base.py +20 -0
  348. vispy/util/svg/color.py +219 -0
  349. vispy/util/svg/element.py +51 -0
  350. vispy/util/svg/geometry.py +478 -0
  351. vispy/util/svg/group.py +66 -0
  352. vispy/util/svg/length.py +81 -0
  353. vispy/util/svg/number.py +25 -0
  354. vispy/util/svg/path.py +332 -0
  355. vispy/util/svg/shapes.py +57 -0
  356. vispy/util/svg/style.py +59 -0
  357. vispy/util/svg/svg.py +40 -0
  358. vispy/util/svg/transform.py +223 -0
  359. vispy/util/svg/transformable.py +28 -0
  360. vispy/util/svg/viewport.py +73 -0
  361. vispy/util/tests/__init__.py +0 -0
  362. vispy/util/tests/test_config.py +58 -0
  363. vispy/util/tests/test_docstring_parameters.py +123 -0
  364. vispy/util/tests/test_emitter_group.py +262 -0
  365. vispy/util/tests/test_event_emitter.py +743 -0
  366. vispy/util/tests/test_fourier.py +35 -0
  367. vispy/util/tests/test_gallery_scraper.py +112 -0
  368. vispy/util/tests/test_import.py +127 -0
  369. vispy/util/tests/test_key.py +22 -0
  370. vispy/util/tests/test_logging.py +45 -0
  371. vispy/util/tests/test_run.py +14 -0
  372. vispy/util/tests/test_transforms.py +42 -0
  373. vispy/util/tests/test_vispy.py +48 -0
  374. vispy/util/transforms.py +201 -0
  375. vispy/util/wrappers.py +155 -0
  376. vispy/version.py +21 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +487 -0
  379. vispy/visuals/axis.py +678 -0
  380. vispy/visuals/border.py +208 -0
  381. vispy/visuals/box.py +79 -0
  382. vispy/visuals/collections/__init__.py +30 -0
  383. vispy/visuals/collections/agg_fast_path_collection.py +219 -0
  384. vispy/visuals/collections/agg_path_collection.py +197 -0
  385. vispy/visuals/collections/agg_point_collection.py +52 -0
  386. vispy/visuals/collections/agg_segment_collection.py +142 -0
  387. vispy/visuals/collections/array_list.py +401 -0
  388. vispy/visuals/collections/base_collection.py +482 -0
  389. vispy/visuals/collections/collection.py +253 -0
  390. vispy/visuals/collections/path_collection.py +23 -0
  391. vispy/visuals/collections/point_collection.py +19 -0
  392. vispy/visuals/collections/polygon_collection.py +25 -0
  393. vispy/visuals/collections/raw_path_collection.py +119 -0
  394. vispy/visuals/collections/raw_point_collection.py +113 -0
  395. vispy/visuals/collections/raw_polygon_collection.py +77 -0
  396. vispy/visuals/collections/raw_segment_collection.py +112 -0
  397. vispy/visuals/collections/raw_triangle_collection.py +78 -0
  398. vispy/visuals/collections/segment_collection.py +19 -0
  399. vispy/visuals/collections/triangle_collection.py +16 -0
  400. vispy/visuals/collections/util.py +168 -0
  401. vispy/visuals/colorbar.py +699 -0
  402. vispy/visuals/cube.py +41 -0
  403. vispy/visuals/ellipse.py +162 -0
  404. vispy/visuals/filters/__init__.py +10 -0
  405. vispy/visuals/filters/base_filter.py +242 -0
  406. vispy/visuals/filters/clipper.py +60 -0
  407. vispy/visuals/filters/clipping_planes.py +122 -0
  408. vispy/visuals/filters/color.py +181 -0
  409. vispy/visuals/filters/markers.py +28 -0
  410. vispy/visuals/filters/mesh.py +801 -0
  411. vispy/visuals/filters/picking.py +60 -0
  412. vispy/visuals/filters/tests/__init__.py +3 -0
  413. vispy/visuals/filters/tests/test_primitive_picking_filters.py +70 -0
  414. vispy/visuals/filters/tests/test_wireframe_filter.py +16 -0
  415. vispy/visuals/glsl/__init__.py +1 -0
  416. vispy/visuals/glsl/antialiasing.py +133 -0
  417. vispy/visuals/glsl/color.py +63 -0
  418. vispy/visuals/graphs/__init__.py +1 -0
  419. vispy/visuals/graphs/graph.py +240 -0
  420. vispy/visuals/graphs/layouts/__init__.py +55 -0
  421. vispy/visuals/graphs/layouts/circular.py +49 -0
  422. vispy/visuals/graphs/layouts/force_directed.py +211 -0
  423. vispy/visuals/graphs/layouts/networkx_layout.py +87 -0
  424. vispy/visuals/graphs/layouts/random.py +52 -0
  425. vispy/visuals/graphs/tests/__init__.py +1 -0
  426. vispy/visuals/graphs/tests/test_layouts.py +139 -0
  427. vispy/visuals/graphs/tests/test_networkx_layout.py +47 -0
  428. vispy/visuals/graphs/util.py +120 -0
  429. vispy/visuals/gridlines.py +161 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +701 -0
  433. vispy/visuals/image_complex.py +130 -0
  434. vispy/visuals/infinite_line.py +199 -0
  435. vispy/visuals/instanced_mesh.py +152 -0
  436. vispy/visuals/isocurve.py +213 -0
  437. vispy/visuals/isoline.py +241 -0
  438. vispy/visuals/isosurface.py +113 -0
  439. vispy/visuals/line/__init__.py +6 -0
  440. vispy/visuals/line/arrow.py +289 -0
  441. vispy/visuals/line/dash_atlas.py +90 -0
  442. vispy/visuals/line/line.py +545 -0
  443. vispy/visuals/line_plot.py +135 -0
  444. vispy/visuals/linear_region.py +199 -0
  445. vispy/visuals/markers.py +819 -0
  446. vispy/visuals/mesh.py +373 -0
  447. vispy/visuals/mesh_normals.py +159 -0
  448. vispy/visuals/plane.py +54 -0
  449. vispy/visuals/polygon.py +145 -0
  450. vispy/visuals/rectangle.py +196 -0
  451. vispy/visuals/regular_polygon.py +56 -0
  452. vispy/visuals/scrolling_lines.py +197 -0
  453. vispy/visuals/shaders/__init__.py +17 -0
  454. vispy/visuals/shaders/compiler.py +206 -0
  455. vispy/visuals/shaders/expression.py +99 -0
  456. vispy/visuals/shaders/function.py +788 -0
  457. vispy/visuals/shaders/multiprogram.py +145 -0
  458. vispy/visuals/shaders/parsing.py +140 -0
  459. vispy/visuals/shaders/program.py +161 -0
  460. vispy/visuals/shaders/shader_object.py +162 -0
  461. vispy/visuals/shaders/tests/__init__.py +0 -0
  462. vispy/visuals/shaders/tests/test_function.py +486 -0
  463. vispy/visuals/shaders/tests/test_multiprogram.py +78 -0
  464. vispy/visuals/shaders/tests/test_parsing.py +57 -0
  465. vispy/visuals/shaders/variable.py +272 -0
  466. vispy/visuals/spectrogram.py +169 -0
  467. vispy/visuals/sphere.py +80 -0
  468. vispy/visuals/surface_plot.py +192 -0
  469. vispy/visuals/tests/__init__.py +0 -0
  470. vispy/visuals/tests/test_arrows.py +109 -0
  471. vispy/visuals/tests/test_axis.py +120 -0
  472. vispy/visuals/tests/test_collections.py +15 -0
  473. vispy/visuals/tests/test_colorbar.py +179 -0
  474. vispy/visuals/tests/test_colormap.py +97 -0
  475. vispy/visuals/tests/test_ellipse.py +122 -0
  476. vispy/visuals/tests/test_gridlines.py +30 -0
  477. vispy/visuals/tests/test_histogram.py +24 -0
  478. vispy/visuals/tests/test_image.py +392 -0
  479. vispy/visuals/tests/test_image_complex.py +36 -0
  480. vispy/visuals/tests/test_infinite_line.py +53 -0
  481. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  482. vispy/visuals/tests/test_isosurface.py +22 -0
  483. vispy/visuals/tests/test_linear_region.py +152 -0
  484. vispy/visuals/tests/test_markers.py +54 -0
  485. vispy/visuals/tests/test_mesh.py +261 -0
  486. vispy/visuals/tests/test_mesh_normals.py +218 -0
  487. vispy/visuals/tests/test_polygon.py +112 -0
  488. vispy/visuals/tests/test_rectangle.py +163 -0
  489. vispy/visuals/tests/test_regular_polygon.py +111 -0
  490. vispy/visuals/tests/test_scalable_textures.py +196 -0
  491. vispy/visuals/tests/test_sdf.py +73 -0
  492. vispy/visuals/tests/test_spectrogram.py +42 -0
  493. vispy/visuals/tests/test_surface_plot.py +57 -0
  494. vispy/visuals/tests/test_text.py +95 -0
  495. vispy/visuals/tests/test_volume.py +542 -0
  496. vispy/visuals/tests/test_windbarb.py +33 -0
  497. vispy/visuals/text/__init__.py +7 -0
  498. vispy/visuals/text/_sdf_cpu.cpython-313-darwin.so +0 -0
  499. vispy/visuals/text/_sdf_cpu.pyx +112 -0
  500. vispy/visuals/text/_sdf_gpu.py +316 -0
  501. vispy/visuals/text/text.py +675 -0
  502. vispy/visuals/transforms/__init__.py +34 -0
  503. vispy/visuals/transforms/_util.py +191 -0
  504. vispy/visuals/transforms/base_transform.py +233 -0
  505. vispy/visuals/transforms/chain.py +300 -0
  506. vispy/visuals/transforms/interactive.py +98 -0
  507. vispy/visuals/transforms/linear.py +564 -0
  508. vispy/visuals/transforms/nonlinear.py +398 -0
  509. vispy/visuals/transforms/tests/__init__.py +0 -0
  510. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  511. vispy/visuals/transforms/transform_system.py +339 -0
  512. vispy/visuals/tube.py +173 -0
  513. vispy/visuals/visual.py +923 -0
  514. vispy/visuals/volume.py +1366 -0
  515. vispy/visuals/windbarb.py +291 -0
  516. vispy/visuals/xyz_axis.py +34 -0
  517. vispy-0.15.0.dist-info/METADATA +243 -0
  518. vispy-0.15.0.dist-info/RECORD +521 -0
  519. vispy-0.15.0.dist-info/WHEEL +6 -0
  520. vispy-0.15.0.dist-info/licenses/LICENSE.txt +36 -0
  521. vispy-0.15.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,451 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """vispy backend for pyglet."""
6
+
7
+ from __future__ import division
8
+
9
+ from packaging.version import Version
10
+ from time import sleep
11
+
12
+ from ..base import (BaseApplicationBackend, BaseCanvasBackend,
13
+ BaseTimerBackend)
14
+ from ...util import keys
15
+ from ...util.ptime import time
16
+ from ... import config
17
+
18
+ USE_EGL = config['gl_backend'].lower().startswith('es')
19
+
20
+
21
+ # -------------------------------------------------------------------- init ---
22
+
23
+ try:
24
+ import pyglet
25
+ version = pyglet.version
26
+ if Version(version) < Version('1.2'):
27
+ help_ = ('You can install the latest pyglet using:\n '
28
+ 'pip install http://pyglet.googlecode.com/archive/tip.zip')
29
+ raise ImportError('Pyglet version too old (%s), need >= 1.2\n%s'
30
+ % (version, help_))
31
+
32
+ # Map native keys to vispy keys
33
+ KEYMAP = {
34
+ pyglet.window.key.LSHIFT: keys.SHIFT,
35
+ pyglet.window.key.RSHIFT: keys.SHIFT,
36
+ pyglet.window.key.LCTRL: keys.CONTROL,
37
+ pyglet.window.key.RCTRL: keys.CONTROL,
38
+ pyglet.window.key.LALT: keys.ALT,
39
+ pyglet.window.key.RALT: keys.ALT,
40
+ pyglet.window.key.LMETA: keys.META,
41
+ pyglet.window.key.RMETA: keys.META,
42
+
43
+ pyglet.window.key.LEFT: keys.LEFT,
44
+ pyglet.window.key.UP: keys.UP,
45
+ pyglet.window.key.RIGHT: keys.RIGHT,
46
+ pyglet.window.key.DOWN: keys.DOWN,
47
+ pyglet.window.key.PAGEUP: keys.PAGEUP,
48
+ pyglet.window.key.PAGEDOWN: keys.PAGEDOWN,
49
+
50
+ pyglet.window.key.INSERT: keys.INSERT,
51
+ pyglet.window.key.DELETE: keys.DELETE,
52
+ pyglet.window.key.HOME: keys.HOME,
53
+ pyglet.window.key.END: keys.END,
54
+
55
+ pyglet.window.key.ESCAPE: keys.ESCAPE,
56
+ pyglet.window.key.BACKSPACE: keys.BACKSPACE,
57
+
58
+ pyglet.window.key.F1: keys.F1,
59
+ pyglet.window.key.F2: keys.F2,
60
+ pyglet.window.key.F3: keys.F3,
61
+ pyglet.window.key.F4: keys.F4,
62
+ pyglet.window.key.F5: keys.F5,
63
+ pyglet.window.key.F6: keys.F6,
64
+ pyglet.window.key.F7: keys.F7,
65
+ pyglet.window.key.F8: keys.F8,
66
+ pyglet.window.key.F9: keys.F9,
67
+ pyglet.window.key.F10: keys.F10,
68
+ pyglet.window.key.F11: keys.F11,
69
+ pyglet.window.key.F12: keys.F12,
70
+
71
+ pyglet.window.key.SPACE: keys.SPACE,
72
+ pyglet.window.key.ENTER: keys.ENTER, # == pyglet.window.key.RETURN
73
+ pyglet.window.key.NUM_ENTER: keys.ENTER,
74
+ pyglet.window.key.TAB: keys.TAB,
75
+ }
76
+
77
+ BUTTONMAP = {pyglet.window.mouse.LEFT: 1,
78
+ pyglet.window.mouse.RIGHT: 2,
79
+ pyglet.window.mouse.MIDDLE: 3
80
+ }
81
+ except Exception as exp:
82
+ available, testable, why_not, which = False, False, str(exp), None
83
+
84
+ class _Window(object):
85
+ pass
86
+ else:
87
+ if USE_EGL:
88
+ available, testable, why_not = False, False, 'EGL not supported'
89
+ else:
90
+ available, testable, why_not = True, True, None
91
+ which = 'pyglet ' + str(pyglet.version)
92
+ _Window = pyglet.window.Window
93
+
94
+
95
+ # -------------------------------------------------------------- capability ---
96
+
97
+ capability = dict( # things that can be set by the backend
98
+ title=True,
99
+ size=True,
100
+ position=True,
101
+ show=True,
102
+ vsync=True,
103
+ resizable=True,
104
+ decorate=True,
105
+ fullscreen=True,
106
+ context=True,
107
+ multi_window=True,
108
+ scroll=True,
109
+ parent=False,
110
+ always_on_top=False,
111
+ )
112
+
113
+
114
+ # ------------------------------------------------------- set_configuration ---
115
+
116
+ def _set_config(config):
117
+ """Set gl configuration"""
118
+ pyglet_config = pyglet.gl.Config()
119
+
120
+ pyglet_config.red_size = config['red_size']
121
+ pyglet_config.green_size = config['green_size']
122
+ pyglet_config.blue_size = config['blue_size']
123
+ pyglet_config.alpha_size = config['alpha_size']
124
+
125
+ pyglet_config.accum_red_size = 0
126
+ pyglet_config.accum_green_size = 0
127
+ pyglet_config.accum_blue_size = 0
128
+ pyglet_config.accum_alpha_size = 0
129
+
130
+ pyglet_config.depth_size = config['depth_size']
131
+ pyglet_config.stencil_size = config['stencil_size']
132
+ pyglet_config.double_buffer = config['double_buffer']
133
+ pyglet_config.stereo = config['stereo']
134
+ pyglet_config.samples = config['samples']
135
+ return pyglet_config
136
+
137
+
138
+ # ------------------------------------------------------------- application ---
139
+
140
+ class ApplicationBackend(BaseApplicationBackend):
141
+
142
+ def __init__(self):
143
+ BaseApplicationBackend.__init__(self)
144
+
145
+ def _vispy_get_backend_name(self):
146
+ return 'Pyglet'
147
+
148
+ def _vispy_process_events(self):
149
+ # pyglet.app.platform_event_loop.step(0.0)
150
+ pyglet.clock.tick()
151
+ for window in pyglet.app.windows:
152
+ window.switch_to()
153
+ window.dispatch_events()
154
+ window.dispatch_event('on_draw')
155
+
156
+ def _vispy_run(self):
157
+ return pyglet.app.run()
158
+
159
+ def _vispy_quit(self):
160
+ return pyglet.app.exit()
161
+
162
+ def _vispy_get_native_app(self):
163
+ return pyglet.app
164
+
165
+
166
+ # ------------------------------------------------------------------ canvas ---
167
+
168
+ class CanvasBackend(BaseCanvasBackend, _Window):
169
+ """Pyglet backend for Canvas abstract class."""
170
+
171
+ def __init__(self, vispy_canvas, **kwargs):
172
+ BaseCanvasBackend.__init__(self, vispy_canvas)
173
+ p = self._process_backend_kwargs(kwargs)
174
+
175
+ # Deal with config
176
+ config = _set_config(p.context.config) # Also used further below
177
+ # Deal with context
178
+ p.context.shared.add_ref('pyglet', self)
179
+ # contexts are shared by default in Pyglet
180
+
181
+ style = (pyglet.window.Window.WINDOW_STYLE_DEFAULT if p.decorate else
182
+ pyglet.window.Window.WINDOW_STYLE_BORDERLESS)
183
+ # We keep track of modifier keys so we can pass them to mouse_motion
184
+ self._current_modifiers = set()
185
+ # self._buttons_accepted = 0
186
+ self._draw_ok = False # whether it is ok to draw yet
187
+ self._pending_position = None
188
+ if p.fullscreen is not False:
189
+ screen = pyglet.window.get_platform().get_default_display()
190
+ self._vispy_fullscreen = True
191
+ if p.fullscreen is True:
192
+ self._vispy_screen = screen.get_default_screen()
193
+ else:
194
+ screen = screen.get_screens()
195
+ if p.fullscreen >= len(screen):
196
+ raise RuntimeError('fullscreen must be < %s'
197
+ % len(screen))
198
+ self._vispy_screen = screen[p.fullscreen]
199
+ else:
200
+ self._vispy_fullscreen = False
201
+ self._vispy_screen = None
202
+ self._initialize_sent = False
203
+ pyglet.window.Window.__init__(self, width=p.size[0], height=p.size[1],
204
+ caption=p.title, visible=p.show,
205
+ config=config, vsync=p.vsync,
206
+ resizable=p.resizable, style=style,
207
+ screen=self._vispy_screen)
208
+ if p.position is not None:
209
+ self._vispy_set_position(*p.position)
210
+
211
+ def _vispy_warmup(self):
212
+ etime = time() + 0.1
213
+ while time() < etime:
214
+ sleep(0.01)
215
+ self._vispy_canvas.set_current()
216
+ self._vispy_canvas.app.process_events()
217
+
218
+ # Override these ...
219
+ def flip(self):
220
+ # Is called by event loop after each draw
221
+ pass
222
+
223
+ def on_draw(self):
224
+ # Is called by event loop after each event, whatever event ... really
225
+ if not self._draw_ok:
226
+ self._draw_ok = True
227
+ self.our_draw_func()
228
+
229
+ def draw_mouse_cursor(self):
230
+ # Prevent legacy OpenGL
231
+ pass
232
+
233
+ def _vispy_set_current(self):
234
+ # Make this the current context
235
+ self.switch_to()
236
+
237
+ def _vispy_swap_buffers(self):
238
+ # Swap front and back buffer
239
+ pyglet.window.Window.flip(self)
240
+
241
+ def _vispy_set_title(self, title):
242
+ # Set the window title. Has no effect for widgets
243
+ self.set_caption(title)
244
+
245
+ def _vispy_set_size(self, w, h):
246
+ # Set size of the widget or window
247
+ self.set_size(w, h)
248
+
249
+ def _vispy_set_position(self, x, y):
250
+ # Set positionof the widget or window. May have no effect for widgets
251
+ if self._draw_ok:
252
+ self.set_location(x, y)
253
+ else:
254
+ self._pending_position = x, y
255
+
256
+ def _vispy_set_visible(self, visible):
257
+ # Show or hide the window or widget
258
+ self.set_visible(visible)
259
+
260
+ def _vispy_update(self):
261
+ # Invoke a redraw
262
+ pyglet.clock.schedule_once(self.our_draw_func, 0.0)
263
+
264
+ def _vispy_close(self):
265
+ # Force the window or widget to shut down
266
+ # In Pyglet close is equivalent to destroy (window becomes invalid)
267
+ self._vispy_canvas = None
268
+ self.close()
269
+
270
+ def _vispy_get_size(self):
271
+ w, h = self.get_size()
272
+ return w, h
273
+
274
+ def _vispy_get_physical_size(self):
275
+ if self._vispy_canvas is None:
276
+ return
277
+ w, h = self.get_framebuffer_size()
278
+ return w, h
279
+
280
+ def _vispy_get_position(self):
281
+ x, y = self.get_location()
282
+ return x, y
283
+
284
+ def _vispy_get_fullscreen(self):
285
+ return self._vispy_fullscreen
286
+
287
+ def _vispy_set_fullscreen(self, fullscreen):
288
+ self._vispy_fullscreen = bool(fullscreen)
289
+ self.set_fullscreen(self._vispy_fullscreen, self._vispy_screen)
290
+
291
+ def on_show(self):
292
+ if self._vispy_canvas is None:
293
+ return
294
+ if not self._initialize_sent:
295
+ self._initialize_sent = True
296
+ self._vispy_canvas.set_current()
297
+ self._vispy_canvas.events.initialize()
298
+ # Set location now if we must. For some reason we get weird
299
+ # offsets in viewport if set_location is called before the
300
+ # widget is shown.
301
+ if self._pending_position:
302
+ x, y = self._pending_position
303
+ self._pending_position = None
304
+ self.set_location(x, y)
305
+ # Redraw
306
+ self._vispy_update()
307
+
308
+ def on_close(self):
309
+ if self._vispy_canvas is None:
310
+ return
311
+ self._vispy_canvas.close()
312
+
313
+ def on_resize(self, w, h):
314
+ if self._vispy_canvas is None:
315
+ return
316
+ self._vispy_canvas.events.resize(size=(w, h))
317
+ # self._vispy_update()
318
+
319
+ def our_draw_func(self, dummy=None):
320
+ if not self._draw_ok or self._vispy_canvas is None:
321
+ return
322
+ # (0, 0, self.width, self.height))
323
+ self._vispy_canvas.set_current()
324
+ self._vispy_canvas.events.draw(region=None)
325
+
326
+ def on_mouse_press(self, x, y, button, modifiers=None):
327
+ if self._vispy_canvas is None:
328
+ return
329
+ self._vispy_mouse_press(
330
+ pos=(x, self.get_size()[1] - y),
331
+ button=BUTTONMAP.get(button, 0),
332
+ modifiers=self._modifiers(),
333
+ )
334
+ # if ev2.handled:
335
+ # self._buttons_accepted |= button
336
+
337
+ def on_mouse_release(self, x, y, button, modifiers=None):
338
+ if self._vispy_canvas is None:
339
+ return
340
+ if True: # (button & self._buttons_accepted) > 0:
341
+ self._vispy_mouse_release(
342
+ pos=(x, self.get_size()[1] - y),
343
+ button=BUTTONMAP.get(button, 0),
344
+ modifiers=self._modifiers(),
345
+ )
346
+ # self._buttons_accepted &= ~button
347
+
348
+ def on_mouse_motion(self, x, y, dx, dy):
349
+ if self._vispy_canvas is None:
350
+ return
351
+ self._vispy_mouse_move(
352
+ pos=(x, self.get_size()[1] - y),
353
+ modifiers=self._modifiers(),
354
+ )
355
+
356
+ def on_mouse_drag(self, x, y, dx, dy, button, modifiers):
357
+ self.on_mouse_motion(x, y, dx, dy)
358
+
359
+ def on_mouse_scroll(self, x, y, scroll_x, scroll_y):
360
+ if self._vispy_canvas is None:
361
+ return
362
+ self._vispy_canvas.events.mouse_wheel(
363
+ delta=(float(scroll_x), float(scroll_y)),
364
+ pos=(x, self.get_size()[1] - y),
365
+ modifiers=self._modifiers(),
366
+ )
367
+
368
+ def on_key_press(self, key, modifiers):
369
+ # Process modifiers
370
+ if key in (pyglet.window.key.LCTRL, pyglet.window.key.RCTRL,
371
+ pyglet.window.key.LALT, pyglet.window.key.RALT,
372
+ pyglet.window.key.LSHIFT, pyglet.window.key.RSHIFT):
373
+ self._current_modifiers.add(key)
374
+ # Emit
375
+ self._vispy_canvas.events.key_press(
376
+ key=self._processKey(key),
377
+ text='', # Handlers that trigger on text wont see this event
378
+ modifiers=self._modifiers(modifiers))
379
+
380
+ def on_text(self, text):
381
+ # Typically this is called after on_key_press and before
382
+ # on_key_release
383
+ self._vispy_canvas.events.key_press(
384
+ key=None, # Handlers that trigger on key wont see this event
385
+ text=text,
386
+ modifiers=self._modifiers())
387
+
388
+ def on_key_release(self, key, modifiers):
389
+ # Process modifiers
390
+ if key in (pyglet.window.key.LCTRL, pyglet.window.key.RCTRL,
391
+ pyglet.window.key.LALT, pyglet.window.key.RALT,
392
+ pyglet.window.key.LSHIFT, pyglet.window.key.RSHIFT):
393
+ self._current_modifiers.discard(key)
394
+ # Get txt
395
+ try:
396
+ text = chr(key)
397
+ except Exception:
398
+ text = ''
399
+ # Emit
400
+ self._vispy_canvas.events.key_release(
401
+ key=self._processKey(key), text=text,
402
+ modifiers=self._modifiers(modifiers))
403
+
404
+ def _processKey(self, key):
405
+ if 97 <= key <= 122:
406
+ key -= 32
407
+ if key in KEYMAP:
408
+ return KEYMAP[key]
409
+ elif key >= 32 and key <= 127:
410
+ return keys.Key(chr(key))
411
+ else:
412
+ return None
413
+
414
+ def _modifiers(self, pygletmod=None):
415
+ mod = ()
416
+ if pygletmod is None:
417
+ pygletmod = self._current_modifiers
418
+ if isinstance(pygletmod, set):
419
+ for key in pygletmod:
420
+ mod += KEYMAP[key],
421
+ else:
422
+ if pygletmod & pyglet.window.key.MOD_SHIFT:
423
+ mod += keys.SHIFT,
424
+ if pygletmod & pyglet.window.key.MOD_CTRL:
425
+ mod += keys.CONTROL,
426
+ if pygletmod & pyglet.window.key.MOD_ALT:
427
+ mod += keys.ALT,
428
+ return mod
429
+
430
+
431
+ # ------------------------------------------------------------------- timer ---
432
+
433
+ class TimerBackend(BaseTimerBackend):
434
+
435
+ def _vispy_start(self, interval):
436
+ interval = self._vispy_timer._interval
437
+ if self._vispy_timer.max_iterations == 1:
438
+ pyglet.clock.schedule_once(self._vispy_timer._timeout, interval)
439
+ else:
440
+ # seems pyglet does not give the expected behavior when interval==0
441
+ if interval == 0:
442
+ interval = 1e-9
443
+ pyglet.clock.schedule_interval(
444
+ self._vispy_timer._timeout,
445
+ interval)
446
+
447
+ def _vispy_stop(self):
448
+ pyglet.clock.unschedule(self._vispy_timer._timeout)
449
+
450
+ def _vispy_get_native_timer(self):
451
+ return pyglet.clock
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """PyQt4 proxy backend for the qt backend."""
6
+
7
+ import sys
8
+ from .. import backends
9
+ from ...util import logger
10
+ from ... import config
11
+
12
+ USE_EGL = config['gl_backend'].lower().startswith('es')
13
+
14
+ try:
15
+ # Try importing (QtOpenGL first to fail without import QtCore)
16
+ if not USE_EGL:
17
+ from PyQt4 import QtOpenGL # noqa
18
+ from PyQt4 import QtGui, QtCore # noqa
19
+ except Exception as exp:
20
+ # Fail: this backend cannot be used
21
+ available, testable, why_not, which = False, False, str(exp), None
22
+ else:
23
+ # Success
24
+ available, testable, why_not = True, True, None
25
+ has_uic = True
26
+ which = ('PyQt4', QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR)
27
+ # Remove _qt module to force an import even if it was already imported
28
+ sys.modules.pop(__name__.replace('_pyqt4', '_qt'), None)
29
+ # Import _qt. Keep a ref to the module object!
30
+ if backends.qt_lib is None:
31
+ backends.qt_lib = 'pyqt4' # Signal to _qt what it should import
32
+ from . import _qt # noqa
33
+ from ._qt import * # noqa
34
+ else:
35
+ logger.warning('%s already imported, cannot switch to %s'
36
+ % (backends.qt_lib, 'pyqt4'))
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """PyQt5 proxy backend for the qt backend."""
6
+
7
+ import sys
8
+ from .. import backends
9
+ from ...util import logger
10
+ from ... import config
11
+
12
+ USE_EGL = config['gl_backend'].lower().startswith('es')
13
+
14
+ try:
15
+ # Try importing (QtOpenGL first to fail without import QtCore)
16
+ if not USE_EGL:
17
+ from PyQt5 import QtOpenGL # noqa
18
+ from PyQt5 import QtGui, QtCore # noqa
19
+ except Exception as exp:
20
+ # Fail: this backend cannot be used
21
+ available, testable, why_not, which = False, False, str(exp), None
22
+ else:
23
+ # Success
24
+ available, testable, why_not = True, True, None
25
+ has_uic = True
26
+ which = ('PyQt5', QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR)
27
+ # Remove _qt module to force an import even if it was already imported
28
+ sys.modules.pop(__name__.replace('_pyqt5', '_qt'), None)
29
+ # Import _qt. Keep a ref to the module object!
30
+ if backends.qt_lib is None:
31
+ backends.qt_lib = 'pyqt5' # Signal to _qt what it should import
32
+ from . import _qt # noqa
33
+ from ._qt import * # noqa
34
+ else:
35
+ logger.warning('%s already imported, cannot switch to %s'
36
+ % (backends.qt_lib, 'pyqt5'))
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """PyQt6 proxy backend for the qt backend.
6
+ Based on PySIde6 backend.
7
+ """
8
+
9
+ import sys
10
+ from .. import backends
11
+ from ...util import logger
12
+ from ... import config
13
+
14
+ USE_EGL = config['gl_backend'].lower().startswith('es')
15
+
16
+ try:
17
+ # Try importing (QtOpenGL first to fail without import QtCore)
18
+ if not USE_EGL:
19
+ from PyQt6 import QtOpenGL # noqa
20
+ from PyQt6 import QtGui, QtCore # noqa
21
+ except Exception as exp:
22
+ # Fail: this backend cannot be used
23
+ available, testable, why_not, which = False, False, str(exp), None
24
+ else:
25
+ # Success
26
+ available, testable, why_not = True, True, None
27
+ # What is this for? PyQt5 sets this to true, PySide sets this to false
28
+ has_uic = False
29
+
30
+ which = ('PyQt6', QtCore.PYQT_VERSION_STR, QtCore.PYQT_VERSION_STR)
31
+ # Remove _qt module to force an import even if it was already imported
32
+ sys.modules.pop(__name__.replace('_pyqt6', '_qt'), None)
33
+ # Import _qt. Keep a ref to the module object!
34
+ if backends.qt_lib is None:
35
+ backends.qt_lib = 'pyqt6' # Signal to _qt what it should import
36
+ from . import _qt # noqa
37
+ from ._qt import * # noqa
38
+ else:
39
+ logger.warning('%s already imported, cannot switch to %s'
40
+ % (backends.qt_lib, 'pyqt6'))
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """PySide proxy backend for the qt backend."""
6
+
7
+ import sys
8
+ from .. import backends
9
+ from ...util import logger
10
+ from ... import config
11
+
12
+ USE_EGL = config['gl_backend'].lower().startswith('es')
13
+
14
+ try:
15
+ # Try importing (QtOpenGL first to fail without import QtCore)
16
+ if not USE_EGL:
17
+ from PySide import QtOpenGL # noqa
18
+ from PySide import QtGui, QtCore # noqa
19
+ except Exception as exp:
20
+ # Fail: this backend cannot be used
21
+ available, testable, why_not, which = False, False, str(exp), None
22
+ else:
23
+ # Success
24
+ available, testable, why_not = True, True, None
25
+ has_uic = False
26
+ import PySide
27
+ which = ('PySide', PySide.__version__, QtCore.__version__)
28
+ # Remove _qt module to force an import even if it was already imported
29
+ sys.modules.pop(__name__.replace('_pyside', '_qt'), None)
30
+ # Import _qt. Keep a ref to the module object!
31
+ if backends.qt_lib is None:
32
+ backends.qt_lib = 'pyside' # Signal to _qt what it should import
33
+ from . import _qt # noqa
34
+ from ._qt import * # noqa
35
+ else:
36
+ logger.warning('%s already imported, cannot switch to %s'
37
+ % (backends.qt_lib, 'PySide'))
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+
5
+ """PySide2 proxy backend for the qt backend."""
6
+
7
+ import sys
8
+ from .. import backends
9
+ from ...util import logger
10
+ from ... import config
11
+
12
+ USE_EGL = config['gl_backend'].lower().startswith('es')
13
+
14
+ try:
15
+ # Try importing (QtOpenGL first to fail without import QtCore)
16
+ if not USE_EGL:
17
+ from PySide2 import QtOpenGL # noqa
18
+ from PySide2 import QtGui, QtCore # noqa
19
+ except Exception as exp:
20
+ # Fail: this backend cannot be used
21
+ available, testable, why_not, which = False, False, str(exp), None
22
+ else:
23
+ # Success
24
+ available, testable, why_not = True, True, None
25
+ # What is this for? PyQt5 sets this to true, PySide sets this to false
26
+ has_uic = False
27
+ import PySide2
28
+
29
+ # PySide2 doesn't have qWait for some reason see:
30
+ # https://github.com/pyqtgraph/pyqtgraph/pull/376/commits/8bdc19be75a7552cc0043bf8b5f5e0ee796edda0
31
+ from PySide2 import QtTest
32
+ if not hasattr(QtTest.QTest, 'qWait'):
33
+ @staticmethod
34
+ def qWait(msec):
35
+ import time
36
+ start = time.time()
37
+ PySide2.QtWidgets.QApplication.processEvents()
38
+ while time.time() < start + msec * 0.001:
39
+ PySide2.QtWidgets.QApplication.processEvents()
40
+ QtTest.QTest.qWait = qWait
41
+
42
+ which = ('PySide2', PySide2.__version__, QtCore.__version__)
43
+ # Remove _qt module to force an import even if it was already imported
44
+ sys.modules.pop(__name__.replace('_pyside2', '_qt'), None)
45
+ # Import _qt. Keep a ref to the module object!
46
+ if backends.qt_lib is None:
47
+ backends.qt_lib = 'pyside2' # Signal to _qt what it should import
48
+ from . import _qt # noqa
49
+ from ._qt import * # noqa
50
+ else:
51
+ logger.warning('%s already imported, cannot switch to %s'
52
+ % (backends.qt_lib, 'pyside2'))