| // SPDX-License-Identifier: GPL-2.0+ |
| /* |
| * Implementation of a menu in a scene |
| * |
| * Copyright 2025 Google LLC |
| * Written by Simon Glass <sjg@chromium.org> |
| */ |
| |
| #define LOG_CATEGORY LOGC_EXPO |
| |
| #include <expo.h> |
| #include <log.h> |
| #include <linux/err.h> |
| #include <linux/sizes.h> |
| #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; |
| } |