Add imgui controls to the given canvas.
Source code in src/scenex/imgui/_controls.py
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 | def add_imgui_controls(view: View) -> None:
"""Add imgui controls to the given canvas."""
snx_canvas_model = view.canvas
snx_canvas_adaptor = snx_canvas_model._get_adaptor()
snx_view_adaptor = view._get_adaptor()
render_canv = snx_canvas_model._get_native()
if not (
isinstance(snx_canvas_adaptor, PygfxCanvasAdaptor)
and isinstance(snx_view_adaptor, PygfxViewAdaptor)
and isinstance(render_canv, BaseRenderCanvas)
):
raise NotImplementedError(
"Imgui controls can currently only be added to a canvas backed by pygfx."
)
imgui_renderer = ImguiRenderer(
device=snx_view_adaptor._renderer.device,
canvas=render_canv, # pyright: ignore[reportArgumentType] (incorrect hint)
)
if implot.get_current_context() is None:
implot.create_context() # must run after ImGui context exists
@imgui_renderer.set_gui # type: ignore [misc]
def _update_gui() -> imgui.ImDrawData:
imgui.new_frame()
render_imgui_view_controls(view)
imgui.end_frame()
imgui.render()
return imgui.get_draw_data()
@render_canv.request_draw
def _update() -> None:
snx_canvas_adaptor._draw()
imgui_renderer.render()
|