[PATCH 10/19] expo: Provide a few functions for working with dimensions
Simon Glass
sjg at chromium.org
Mon May 5 17:42:48 CEST 2025
Allow expanding dimensions using the dimensions of an object or another
dimensions struct.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
boot/scene.c | 20 ++++++++++++++++++++
boot/scene_internal.h | 29 ++++++++++++++++++++++++++---
2 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/boot/scene.c b/boot/scene.c
index 2ea8e30ad83..258161f27ce 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -1219,3 +1219,23 @@ int scene_bbox_union(struct scene *scn, uint id, int inset,
return 0;
}
+
+void scene_dims_join(struct scene_obj_dims *src, struct scene_obj_dims *dst)
+{
+ dst->x = max(dst->x, src->x);
+ dst->y = max(dst->y, src->y);
+}
+
+int scene_dims_union(struct scene *scn, uint id, struct scene_obj_dims *dims)
+{
+ struct scene_obj *obj;
+
+ if (!id)
+ return 0;
+ obj = scene_obj_find(scn, id, SCENEOBJT_NONE);
+ if (!obj)
+ return log_msg_ret("obj", -ENOENT);
+ scene_dims_join(&obj->dims, dims);
+
+ return 0;
+}
diff --git a/boot/scene_internal.h b/boot/scene_internal.h
index 04218b4b911..f9b30caa208 100644
--- a/boot/scene_internal.h
+++ b/boot/scene_internal.h
@@ -16,6 +16,7 @@ struct expo_action;
struct expo_arrange_info;
struct expo_theme;
struct scene_obj;
+struct scene_obj_dims;
struct scene_obj_menu;
struct scene_obj_textline;
struct scene_obj_txtedit;
@@ -325,7 +326,7 @@ struct scene_menitem *scene_menuitem_find_val(const struct scene_obj_menu *menu,
int val);
/**
- * scene_bbox_join() - update bouding box with a given src box
+ * scene_bbox_join() - update bounding box with a given src bbox
*
* Updates @dst so that it encompasses the bounding box @src
*
@@ -338,11 +339,11 @@ int scene_bbox_join(const struct vidconsole_bbox *src, int inset,
struct vidconsole_bbox *dst);
/**
- * scene_bbox_union() - update bouding box with the demensions of an object
+ * scene_bbox_union() - update bounding box with the bbox of an object
*
* Updates @bbox so that it encompasses the bounding box of object @id
*
- * @snd: Scene containing object
+ * @scn: Scene containing object
* @id: Object id
* @inset: Amount of inset to use for width
* @bbox: Bounding box to update
@@ -351,6 +352,28 @@ int scene_bbox_join(const struct vidconsole_bbox *src, int inset,
int scene_bbox_union(struct scene *scn, uint id, int inset,
struct vidconsole_bbox *bbox);
+/**
+ * scene_bbox_join() - update dimensions with a given src dimensions
+ *
+ * Updates @dst so that it encompasses the dimensions of @src
+ *
+ * @src: Input dimensions
+ * @dst: Dimensions to update
+ */
+void scene_dims_join(struct scene_obj_dims *src, struct scene_obj_dims *dst);
+
+/**
+ * scene_dims_union() - update dimensions with the dimensions of an object
+ *
+ * Updates @dims so that it encompasses the dimensions of object @id
+ *
+ * @scn: Scene containing object
+ * @id: Object id
+ * @dims: Dimensions to update
+ * Return: 0 if OK, -ve on error
+ */
+int scene_dims_union(struct scene *scn, uint id, struct scene_obj_dims *dims);
+
/**
* scene_textline_calc_dims() - Calculate the dimensions of a textline
*
--
2.43.0
More information about the U-Boot
mailing list