expo: Provide a way to position things relative to display
authorSimon Glass <sjg@chromium.org>
Fri, 2 May 2025 14:46:53 +0000 (08:46 -0600)
committerSimon Glass <sjg@chromium.org>
Fri, 30 May 2025 08:49:32 +0000 (09:49 +0100)
It is often necessary to centre objects within the display area. Add a
special position value to indicate this.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/scene.c
include/expo.h

index 237f2bc..fa8f540 100644 (file)
@@ -364,6 +364,11 @@ static void handle_alignment(enum scene_obj_align horiz,
 {
        int width, height;
 
+       if (bbox->x1 == SCENEOB_DISPLAY_MAX)
+               bbox->x1 = xsize ?: 1280;
+       if (bbox->y1 == SCENEOB_DISPLAY_MAX)
+               bbox->y1 = ysize ?: 1024;
+
        width = bbox->x1 - bbox->x0;
        height = bbox->y1 - bbox->y0;
 
index 2addddd..4dee479 100644 (file)
@@ -242,6 +242,12 @@ struct scene_obj_dims {
        int y;
 };
 
+/* special values for dimensions */
+enum {
+       /* width/height of the display */
+       SCENEOB_DISPLAY_MAX     = 0x7f000000,
+};
+
 /**
  * enum scene_obj_halign - Horizontal alignment of objects
  *