| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- # Part of ImGui Bundle - MIT License - Copyright (c) 2022-2026 Pascal Thomet - https://github.com/pthom/imgui_bundle
- from imgui_bundle import imgui, hello_imgui, imgui_md, immapp, ImVec2
- from imgui_bundle.demos_python import demo_utils # this will set the assets folder
- def _do_spawn_demo(demo_name: str):
- import os.path
- import subprocess
- import sys
- this_dir = os.path.dirname(__file__)
- demo_file = this_dir + "/demos_nanovg/" + demo_name + ".py"
- subprocess.Popen([sys.executable, demo_file])
- def demo_gui():
- static = demo_gui
- if not hasattr(static, "is_full_demo_opened"):
- static.is_full_demo_opened = False
- if not hasattr(static, "is_simple_demo_opened"):
- static.is_simple_demo_opened = False
- if not hasattr(static, "show_full_demo_rendering_code"):
- static.show_full_demo_rendering_code = False
- imgui_md.render_unindented("""
- [NanoVG](https://github.com/memononen/nanovg) provides antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.
- """)
- if not static.is_full_demo_opened and not static.is_simple_demo_opened:
- imgui.same_line(imgui.get_window_width() - hello_imgui.em_size(14.0))
- if hello_imgui.image_button_from_asset("images/nanovg_full_demo.jpg", ImVec2(hello_imgui.em_size(11.0), 0.0)):
- _do_spawn_demo("demo_nanovg_full")
- nb_code_lines = 35
- if imgui.collapsing_header("Full Demo"):
- static.is_full_demo_opened = True
- imgui.begin_group()
- imgui.text(
- "This is the original NanoVG demo, integrated to ImGui Bundle (and also ported to python).\n"
- "Click the button below to launch the demo"
- )
- imgui.new_line()
- if demo_utils.can_run_subprocess():
- if imgui.button("Run full demo"):
- _do_spawn_demo("demo_nanovg_full")
- imgui.end_group()
- imgui.same_line(imgui.get_window_width() - hello_imgui.em_size(14.0))
- if hello_imgui.image_button_from_asset("images/nanovg_full_demo.jpg", ImVec2(hello_imgui.em_size(11.0), 0.0)):
- _do_spawn_demo("demo_nanovg_full")
- if imgui.radio_button("Show launcher code", not static.show_full_demo_rendering_code):
- static.show_full_demo_rendering_code = False
- imgui.same_line()
- if imgui.radio_button("Show rendering code", static.show_full_demo_rendering_code):
- static.show_full_demo_rendering_code = True
- if not static.show_full_demo_rendering_code:
- demo_utils.show_python_vs_cpp_file("demos_nanovg/demo_nanovg_full", nb_code_lines)
- else:
- demo_utils.show_python_vs_cpp_file("demos_nanovg/demo_nanovg_full/demo_nanovg_full_impl", nb_code_lines)
- else:
- static.is_full_demo_opened = False
- if imgui.collapsing_header("Simple Demo"):
- static.is_simple_demo_opened = True
- imgui.begin_group()
- imgui.text(
- "This is a simpler demo, that shows how to display NanoVG as the background, or as a texture.\n"
- "(via a framebuffer object)\n"
- "Click the button below to launch the demo"
- )
- imgui.new_line()
- if demo_utils.can_run_subprocess():
- if imgui.button("Run simple demo"):
- _do_spawn_demo("demo_nanovg_heart")
- imgui.end_group()
- imgui.same_line(imgui.get_window_width() - hello_imgui.em_size(14.0))
- if hello_imgui.image_button_from_asset("images/nanovg_demo_heart.jpg", ImVec2(hello_imgui.em_size(11.0), 0.0)):
- _do_spawn_demo("demo_nanovg_heart")
- demo_utils.show_python_vs_cpp_file("demos_nanovg/demo_nanovg_heart", nb_code_lines)
- else:
- static.is_simple_demo_opened = False
- if __name__ == "__main__":
- immapp.run(demo_gui, window_size=(1000, 800), with_markdown=True, with_node_editor=True)
|