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.
This commit is contained in:
Alec Murphy 2025-04-16 14:57:33 -04:00
parent 34a5985cf0
commit 4ef542cf32

View file

@ -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 = Gui.CreateWidget(renderer->win, WIDGET_TYPE_CHECKBOX, U64_MAX, U64_MAX, width, height); // FIXME: Derive width/height
cb->checked = node->attributes->@("checked"); cb->checked = node->attributes->@("checked");
cb->data = node; cb->data = node;
node->attributes->set("cyberiaGuiWidget", cb, JSON_NUMBER);
return; 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 = Gui.CreateWidget(renderer->win, WIDGET_TYPE_BUTTON, U64_MAX, U64_MAX, width, height); // FIXME: Derive width/height
btn->data = node; btn->data = node;
StrCpy(&btn->text, @t(value, value, "")); StrCpy(&btn->text, @t(value, value, ""));
node->attributes->set("cyberiaGuiWidget", btn, JSON_NUMBER);
return; return;
} }
@ -668,6 +670,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer)
btn->data = node; btn->data = node;
Gui.Widget.SetCallback(btn, "clicked", renderer->form_submit_callback); Gui.Widget.SetCallback(btn, "clicked", renderer->form_submit_callback);
StrCpy(&btn->text, @t(value, value, "Submit")); StrCpy(&btn->text, @t(value, value, "Submit"));
node->attributes->set("cyberiaGuiWidget", btn, JSON_NUMBER);
return; 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 = Gui.CreateWidget(renderer->win, WIDGET_TYPE_INPUT, U64_MAX, U64_MAX, width, height); // FIXME: Derive width/height
input->data = node; input->data = node;
StrCpy(&input->text, @t(value, value, "")); StrCpy(&input->text, @t(value, value, ""));
node->attributes->set("cyberiaGuiWidget", input, JSON_NUMBER);
return; return;
} }
@ -709,6 +713,7 @@ U0 @render_form_element(@html_dom_node* node, HtmlRenderer* renderer)
input->is_password = TRUE; input->is_password = TRUE;
input->data = node; input->data = node;
StrCpy(&input->text, @t(value, value, "")); StrCpy(&input->text, @t(value, value, ""));
node->attributes->set("cyberiaGuiWidget", input, JSON_NUMBER);
return; return;
} }
} }