rendercanvas 2.1.2__tar.gz → 2.2.0__tar.gz

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 (36) hide show
  1. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/PKG-INFO +1 -1
  2. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/_scheduler.py +5 -0
  3. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/_version.py +1 -1
  4. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/glfw.py +4 -2
  5. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/offscreen.py +21 -2
  6. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/qt.py +4 -2
  7. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/wx.py +9 -2
  8. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/LICENSE +0 -0
  9. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/README.md +0 -0
  10. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/pyproject.toml +0 -0
  11. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/__init__.py +0 -0
  12. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/__pyinstaller/__init__.py +0 -0
  13. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/__pyinstaller/conftest.py +0 -0
  14. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/__pyinstaller/hook-rendercanvas.py +0 -0
  15. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/__pyinstaller/test_rendercanvas.py +0 -0
  16. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/_context.py +0 -0
  17. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/_coreutils.py +0 -0
  18. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/_events.py +0 -0
  19. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/_loop.py +0 -0
  20. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/asyncio.py +0 -0
  21. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/auto.py +0 -0
  22. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/base.py +0 -0
  23. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/jupyter.py +0 -0
  24. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/pyqt5.py +0 -0
  25. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/pyqt6.py +0 -0
  26. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/pyside2.py +0 -0
  27. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/pyside6.py +0 -0
  28. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/raw.py +0 -0
  29. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/stub.py +0 -0
  30. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/trio.py +0 -0
  31. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/utils/__init__.py +0 -0
  32. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/utils/asyncadapter.py +0 -0
  33. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/utils/asyncs.py +0 -0
  34. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/utils/bitmappresentadapter.py +0 -0
  35. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/utils/bitmaprenderingcontext.py +0 -0
  36. {rendercanvas-2.1.2 → rendercanvas-2.2.0}/rendercanvas/utils/cube.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rendercanvas
3
- Version: 2.1.2
3
+ Version: 2.2.0
4
4
  Summary: One canvas API, multiple backends
5
5
  Keywords: canvas,rendering,graphics,wgpu,qt,wx,glfw,jupyter
6
6
  Author: Almar Klein, Korijn van Golen
@@ -94,6 +94,11 @@ class Scheduler:
94
94
  self._min_fps = max(0.0, float(min_fps))
95
95
 
96
96
  if max_fps is not None:
97
+ # For users setting max_fps=-1 to try to disable the fps cap, as was the way to go in wgpu.gui
98
+ if max_fps < 1:
99
+ raise ValueError(
100
+ "max_fps should be a >= 1. Use update_mode='fastest' to disable the fps cap. Also see ``vsync=False`` to unlock higher frame rates."
101
+ )
97
102
  self._max_fps = max(1, float(max_fps))
98
103
 
99
104
  def request_draw(self):
@@ -10,7 +10,7 @@ from pathlib import Path
10
10
 
11
11
  # This is the reference version number, to be bumped before each release.
12
12
  # The build system detects this definition when building a distribution.
13
- __version__ = "2.1.2"
13
+ __version__ = "2.2.0"
14
14
 
15
15
  # Allow using nearly the same code in different projects
16
16
  project_name = "rendercanvas"
@@ -81,7 +81,7 @@ KEY_MAP = {
81
81
  glfw.KEY_LEFT_SUPER: "Meta", # in glfw super means Windows or MacOS-command
82
82
  glfw.KEY_NUM_LOCK: "NumLock",
83
83
  glfw.KEY_PAGE_DOWN: "PageDown",
84
- glfw.KEY_PAGE_UP: "Pageup",
84
+ glfw.KEY_PAGE_UP: "PageUp",
85
85
  glfw.KEY_PAUSE: "Pause",
86
86
  glfw.KEY_PRINT_SCREEN: "PrintScreen",
87
87
  glfw.KEY_RIGHT_ALT: "Alt",
@@ -625,7 +625,9 @@ class GlfwRenderCanvas(BaseRenderCanvas):
625
625
  "key": keyname,
626
626
  "modifiers": tuple(self._key_modifiers),
627
627
  }
628
- self.submit_event(ev)
628
+
629
+ if not action == glfw.REPEAT:
630
+ self.submit_event(ev)
629
631
 
630
632
  def _on_char(self, window, char):
631
633
  # Undocumented char event to make imgui work, see https://github.com/pygfx/wgpu-py/issues/530
@@ -17,15 +17,34 @@ class OffscreenRenderCanvas(BaseRenderCanvas):
17
17
  """An offscreen canvas intended for manual use.
18
18
 
19
19
  Call the ``.draw()`` method to perform a draw and get the result.
20
+
21
+ Arguments:
22
+ pixel_ratio (float): the ratio of logical to physical pixels.
23
+ format (str): the preferred format. Multiple formats are supported, but by
24
+ setting the preferred format here, other systems (e.g. Pygfx) will
25
+ automatically use that format.
20
26
  """
21
27
 
22
28
  _rc_canvas_group = OffscreenCanvasGroup(None) # no loop, no scheduling
23
29
 
24
- def __init__(self, *args, pixel_ratio=1.0, **kwargs):
30
+ def __init__(self, *args, pixel_ratio=1.0, format="rgba-u8", **kwargs):
25
31
  super().__init__(*args, **kwargs)
26
32
  self._pixel_ratio = pixel_ratio
27
33
  self._closed = False
28
34
  self._last_image = None
35
+
36
+ self._present_formats = ["rgba-u8", "rgba-f16", "rgba-f32", "rgba-u16"]
37
+ if format != self._present_formats[0]:
38
+ colors, _, dtype = format.partition("-")
39
+ if not (
40
+ colors in ("i", "rgb", "rgba", "bgra")
41
+ and dtype in ("u8", "u16", "u32", "f16", "f32")
42
+ ):
43
+ raise ValueError(f"Unexpected format: {format!r}")
44
+ if format in self._present_formats:
45
+ self._present_formats.remove(format)
46
+ self._present_formats.insert(0, format)
47
+
29
48
  self._final_canvas_init()
30
49
 
31
50
  # %% Methods to implement RenderCanvas
@@ -36,7 +55,7 @@ class OffscreenRenderCanvas(BaseRenderCanvas):
36
55
  def _rc_get_present_methods(self):
37
56
  return {
38
57
  "bitmap": {
39
- "formats": ["rgba-u8", "rgba-f16", "rgba-f32", "rgba-u16"],
58
+ "formats": self._present_formats,
40
59
  }
41
60
  }
42
61
 
@@ -121,7 +121,7 @@ KEY_MAP = {
121
121
  int(Keys.Key_Meta): "Meta", # meta maps to control in QT on macOS, and vice-versa
122
122
  int(Keys.Key_NumLock): "NumLock",
123
123
  int(Keys.Key_PageDown): "PageDown",
124
- int(Keys.Key_PageUp): "Pageup",
124
+ int(Keys.Key_PageUp): "PageUp",
125
125
  int(Keys.Key_Pause): "Pause",
126
126
  int(Keys.Key_ScrollLock): "ScrollLock",
127
127
  int(Keys.Key_Tab): "Tab",
@@ -478,7 +478,9 @@ class QRenderWidget(BaseRenderCanvas, QtWidgets.QWidget):
478
478
  "key": KEY_MAP.get(event.key(), event.text()),
479
479
  "modifiers": modifiers,
480
480
  }
481
- self.submit_event(ev)
481
+
482
+ if not event.isAutoRepeat():
483
+ self.submit_event(ev)
482
484
 
483
485
  def _char_input_event(self, char_str):
484
486
  ev = {
@@ -355,8 +355,13 @@ class WxRenderWidget(BaseRenderCanvas, wx.Window):
355
355
  parent = self.Parent
356
356
  if isinstance(parent, WxRenderCanvas):
357
357
  parent.SetSize(width, height)
358
- else:
358
+ elif parent is not None:
359
359
  self.SetSize(width, height)
360
+ else:
361
+ # The widget has no parent, likely because its going to inserted in a GUI later.
362
+ # This method is likely called from _final_canvas_init and if we call self.SetSize() it will likely error/segfault.
363
+ # See https://github.com/pygfx/rendercanvas/issues/91
364
+ pass
360
365
 
361
366
  def _rc_close(self):
362
367
  self._is_closed = True
@@ -422,7 +427,9 @@ class WxRenderWidget(BaseRenderCanvas, wx.Window):
422
427
  "key": KEY_MAP.get(event.GetKeyCode(), char_str),
423
428
  "modifiers": modifiers,
424
429
  }
425
- self.submit_event(ev)
430
+
431
+ if not event.IsAutoRepeat():
432
+ self.submit_event(ev)
426
433
 
427
434
  def _char_input_event(self, char_str: Optional[str]):
428
435
  if char_str is None:
File without changes
File without changes