"""About dialog for the SimVX editor: minimal modal overlay."""
from simvx.core.ui.enums import AnchorPreset
from .modal_dialog import BaseModalDialog
_W = 360.0
_H = 160.0
_BG = (0.16, 0.16, 0.18, 1.0)
_BORDER = (0.35, 0.35, 0.38, 1.0)
_TEXT = (0.92, 0.92, 0.94, 1.0)
_DIM = (0.55, 0.55, 0.58, 1.0)
[docs]
class AboutDialog(BaseModalDialog):
"""Minimal modal about dialog for the SimVX editor."""
PAUSE_TREE_WHEN_MODAL = True
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.set_anchor_preset(AnchorPreset.FULL_RECT)
self.z_index = 2000
[docs]
def show_dialog(self):
self.open_modal()
[docs]
def hide_dialog(self):
self.dismiss()
def _on_gui_input(self, event):
if not self.visible:
return
if event.key and event.pressed and event.key in ("enter",):
self.hide_dialog()
event.handled = True
return
if getattr(event, "button", 0) == 1 and event.pressed:
# Click anywhere closes the dialog.
self.hide_dialog()
event.handled = True
[docs]
def on_draw(self, renderer):
if not self.visible:
return
ss = self._get_parent_size()
sw, sh = ss.x, ss.y
# DimBackdrop already paints the overlay; just the card here.
dx = (sw - _W) / 2
dy = (sh - _H) / 2
renderer.draw_rect((dx, dy), (_W, _H), colour=_BG, filled=True)
renderer.draw_rect((dx, dy), (_W, _H), colour=_BORDER)
renderer.draw_text("SimVX Engine", (dx + 20, dy + 18), colour=_TEXT, scale=1.3)
renderer.draw_text(
"A Godot-inspired game engine in pure Python.",
(dx + 20, dy + 54), colour=_DIM, scale=0.85,
)
renderer.draw_text(
"Node-based scene hierarchy with Vulkan rendering.",
(dx + 20, dy + 76), colour=_DIM, scale=0.85,
)
renderer.draw_text(
"GPU-driven forward renderer, multi-draw indirect.",
(dx + 20, dy + 98), colour=_DIM, scale=0.85,
)
renderer.draw_text(
"Click or press Escape to close.",
(dx + 20, dy + 130), colour=_DIM, scale=0.75,
)