blob: 8242eb39806dc5368062f4dde98d407ed61a0cae [file] [log] [blame]
Simon Glass5dc887d2025-05-02 08:46:46 -06001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Implementation of a menu in a scene
4 *
5 * Copyright 2025 Google LLC
6 * Written by Simon Glass <sjg@chromium.org>
7 */
8
9#define LOG_CATEGORY LOGC_EXPO
10
11#include <expo.h>
12#include <log.h>
13#include <linux/err.h>
14#include <linux/sizes.h>
15#include "scene_internal.h"
16
17enum {
18 INITIAL_SIZE = SZ_4K,
19};
20
21int scene_texted(struct scene *scn, const char *name, uint id, uint str_id,
22 struct scene_obj_txtedit **teditp)
23{
24 struct scene_obj_txtedit *ted;
25 char *buf;
26 int ret;
27
28 ret = scene_obj_add(scn, name, id, SCENEOBJT_TEXTEDIT,
29 sizeof(struct scene_obj_txtedit),
30 (struct scene_obj **)&ted);
31 if (ret < 0)
32 return log_msg_ret("obj", ret);
33
34 abuf_init(&ted->buf);
35 if (!abuf_realloc(&ted->buf, INITIAL_SIZE))
36 return log_msg_ret("buf", -ENOMEM);
37 buf = abuf_data(&ted->buf);
38 *buf = '\0';
39
40 ret = scene_txt_generic_init(scn->expo, &ted->gen, name, str_id, buf);
41 if (ret)
42 return log_msg_ret("teg", ret);
43 if (teditp)
44 *teditp = ted;
45
46 return ted->obj.id;
47}
48
49int scene_txted_set_font(struct scene *scn, uint id, const char *font_name,
50 uint font_size)
51{
52 struct scene_obj_txtedit *ted;
53
54 ted = scene_obj_find(scn, id, SCENEOBJT_TEXTEDIT);
55 if (!ted)
56 return log_msg_ret("find", -ENOENT);
57 ted->gen.font_name = font_name;
58 ted->gen.font_size = font_size;
59
60 return 0;
61}