From 4ef542cf326c28ea766c7b354d4405ae5a055228 Mon Sep 17 00:00:00 2001 From: Alec Murphy Date: Wed, 16 Apr 2025 14:57:33 -0400 Subject: [PATCH] System/Libraries/Html/Renderer: Keep track of form element widgets Save a pointer to the corresponding Gui widget for each form element as an attribute in the @html_dom_node. I'm not a fan of doing this, but it is probably one of the better options considering the way things are currently implemented, and the remaining work to be done. --- System/Libraries/Html/Renderer.HC | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/System/Libraries/Html/Renderer.HC b/System/Libraries/Html/Renderer.HC index d4025e7..7c97ef9 100644 --- a/System/Libraries/Html/Renderer.HC +++ b/System/Libraries/Html/Renderer.HC @@ -645,6 +645,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer) cb = Gui.CreateWidget(renderer->win, WIDGET_TYPE_CHECKBOX, U64_MAX, U64_MAX, width, height); // FIXME: Derive width/height cb->checked = node->attributes->@("checked"); cb->data = node; + node->attributes->set("cyberiaGuiWidget", cb, JSON_NUMBER); return; } @@ -656,6 +657,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer) btn = Gui.CreateWidget(renderer->win, WIDGET_TYPE_BUTTON, U64_MAX, U64_MAX, width, height); // FIXME: Derive width/height btn->data = node; StrCpy(&btn->text, @t(value, value, "")); + node->attributes->set("cyberiaGuiWidget", btn, JSON_NUMBER); return; } @@ -668,6 +670,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer) btn->data = node; Gui.Widget.SetCallback(btn, "clicked", renderer->form_submit_callback); StrCpy(&btn->text, @t(value, value, "Submit")); + node->attributes->set("cyberiaGuiWidget", btn, JSON_NUMBER); return; } @@ -688,6 +691,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer) input = Gui.CreateWidget(renderer->win, WIDGET_TYPE_INPUT, U64_MAX, U64_MAX, width, height); // FIXME: Derive width/height input->data = node; StrCpy(&input->text, @t(value, value, "")); + node->attributes->set("cyberiaGuiWidget", input, JSON_NUMBER); return; } @@ -709,6 +713,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer) input->is_password = TRUE; input->data = node; StrCpy(&input->text, @t(value, value, "")); + node->attributes->set("cyberiaGuiWidget", input, JSON_NUMBER); return; } }