mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-06 23:36:59 +02:00
It is useful to be able to edit text, e.g. to allow the user to edit the environment or the command-line arguments for the OS. Add the beginnings of an implementation. Future work is needed to finish this: keypress handling and scrolling. For now it just displays the text. Signed-off-by: Simon Glass <sjg@chromium.org>
62 lines
1.3 KiB
C
62 lines
1.3 KiB
C
// 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;
|
|
}
|