// SPDX-License-Identifier: GPL-2.0+ /* * Implementation of a menu in a scene * * Copyright 2025 Google LLC * Written by Simon Glass */ #define LOG_CATEGORY LOGC_EXPO #include #include #include #include #include "scene_internal.h" enum { INITIAL_SIZE = SZ_4K, }; int scene_texted(struct scene *scn, const char *name, uint id, uint str_id, struct scene_obj_txtedit **teditp) { struct scene_obj_txtedit *ted; char *buf; int ret; ret = scene_obj_add(scn, name, id, SCENEOBJT_TEXTEDIT, sizeof(struct scene_obj_txtedit), (struct scene_obj **)&ted); if (ret < 0) return log_msg_ret("obj", ret); abuf_init(&ted->buf); if (!abuf_realloc(&ted->buf, INITIAL_SIZE)) return log_msg_ret("buf", -ENOMEM); buf = abuf_data(&ted->buf); *buf = '\0'; ret = scene_txt_generic_init(scn->expo, &ted->gen, name, str_id, buf); if (ret) return log_msg_ret("teg", ret); if (teditp) *teditp = ted; return ted->obj.id; } int scene_txted_set_font(struct scene *scn, uint id, const char *font_name, uint font_size) { struct scene_obj_txtedit *ted; ted = scene_obj_find(scn, id, SCENEOBJT_TEXTEDIT); if (!ted) return log_msg_ret("find", -ENOENT); ted->gen.font_name = font_name; ted->gen.font_size = font_size; return 0; }