From patchwork Mon Sep 15 12:28:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 324 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939396; bh=qS4EIFatKz+8pqjY1iJCZI1EuS4/WMpNuZyDpR1WFxo=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=XT4x953PSl7adRj1OgKvYh3UMBwcd8KnA7y5JgV4cBMypapXdbVLVAG1ko99yL1rD gfABZwZG+IdrbCA67Xub0eT8xQiLRGhaVveor2ytD95Ttwcfg4UX79VbI8GEhDnSE/ yR80U07k1qgnitBOLSxHUnb8Aimi3QgmnszLoHDmBFSbhtYpKcryHYfQg2NDnIoP/q Jkcgz9XXtn8Va//dxgDXWw3U2OmqaBYKklPQUwiCbVcykCUDAKXp03YU2xmaVeRSdA IhKq7uPrFghLiYbHHljTesaA5SuR6ICkmbZB1JXdhurVKfOBZZNMbNxVv13hZSCicK VTpSstTjXkI2A== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 37E6967BCB for ; Mon, 15 Sep 2025 06:29:56 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 8f87YOTizV19 for ; Mon, 15 Sep 2025 06:29:56 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939394; bh=qS4EIFatKz+8pqjY1iJCZI1EuS4/WMpNuZyDpR1WFxo=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=bz0DdxZJx2PvRe/Hc/4drbo6J2cXWDfKLrR7lhvLSI++vS10TSgD9sM0D+9EFQVue sUBJTTXr+9tkiCUK3WH6lLSWKqcKfWM9hr93skfqkMY01OQw/v1JxO2MP7IxO9uBTr kRSTX63wBrJXUZShMlkjZFB1+4E89SPVGt8ieSOxgzd53uRkvwTH8pvnx5Jj0yKDJU sRZg7b4z4ALiHjAM1D2pgusNa3WpExjFA35KGjmkxoPyyWQpCjDOeNKUmisTlrPNbg m8KuBoo9GGFf6ADPxrPWVpFs7W0w2PzRmrK8gbzqesJSSDCSeb9fJ3AHVB2rQ+brKw oLLiumZ9neBbQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 37F1B67BD4 for ; Mon, 15 Sep 2025 06:29:54 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939392; bh=WmYopcOkXaKdhRqy948KtrifFCJG5lWTPXq1PbrtW3c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=naiRgLd9URHLbpnWt6zfuwOSUDszAno2hOLPAzMMVW3e5X9Low9gX7tUz8D3TdDFH Fexw2OTo9/cVI53RfZa/yNL7N3bjFKMl9LuVjUXpCgr7JFlTfaERZ1Wz9dwhi/Ip0v NEJZ+VguI6TIW8+5n7SxpaSLZXOqIC0eBjPVYltAMBleas1yg6vEt+fzSoaNOIAVWk HYvZd+Hlp4QN5biXPXvGb5dRpKvJVKk2URBsLWFPEYXD2vEUAj/GG2L95f/s+d2/3j gmxmw1b5UB+3LCuaqQoG0V5X02oc2h13U2mu6ffj176k3VPwq0unD3jSB3pQ2d7aoZ QliIO/ucI70Vw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id AA07867B45; Mon, 15 Sep 2025 06:29:52 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id PFPsBg8FzrPm; Mon, 15 Sep 2025 06:29:52 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939391; bh=4IUmmdWgaOAN9TyRnQ0abqKIVURgz6YDyZwdMaaCPMs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vlGfaqTiAUZ9IYsVjP6wKQb1+9dUgMQPmvlLu1v86oH8IbEqJzweuFBXUFk33G9xO OAUfo4bLA3S2UVwMgkkT32UN76EnhtRBAp3N1xSJPx1CP/N3PVPUZ6/A2zFcPI2xfs jPqefC5wNpH4NJQehRV5YXduQNUGAfx4CSlWY0L4+XuI+HoppFU3LwiFl7DlgJE3q0 33Ccw707G7zMwob3bgxOYTcJr8+c9sC2tw1BP9Cg66uuD0DcJCG+1EuKAMxttn+amz B9aKn1/ajDklz6FUrcD8akIokA9Mu47jqsgbwVMCtO7GMt6A9knrGfzpMeEiboyXQ0 B8UlIKOet8/xQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id D1AAA67BAC; Mon, 15 Sep 2025 06:29:50 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:42 -0600 Message-ID: <20250915122905.1217249-10-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250915122905.1217249-1-sjg@u-boot.org> References: <20250915122905.1217249-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: XV2I7OVFKKGQIPR7ZBFY4HLYBR63WAXF X-Message-ID-Hash: XV2I7OVFKKGQIPR7ZBFY4HLYBR63WAXF X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 09/23] expo: Tidy up image position with the menu List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass The bootflow menu creates an image at position -4, expecting that it will be relative to the right side of the display. With the recently added alignment feature, this is not supported. Update the implementation to calculation the correct position instead. Update the tests to match. Signed-off-by: Simon Glass --- boot/scene_menu.c | 16 +++++++++++++++- test/boot/expo.c | 22 +++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/boot/scene_menu.c b/boot/scene_menu.c index 55dde6d2ec2..0ed73cd12cc 100644 --- a/boot/scene_menu.c +++ b/boot/scene_menu.c @@ -227,6 +227,8 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr, const bool stack = exp->popup; const struct expo_theme *theme = &exp->theme; struct scene_menitem *item; + int xsize = 0, ysize = 0; + struct udevice *dev; uint sel_id; int startx, x, y; int ret; @@ -238,6 +240,14 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr, memset(dims, '\0', sizeof(dims)); scene_menu_calc_dims(scn, menu, dims); + dev = scn->expo->display; + if (dev) { + struct video_priv *priv = dev_get_uclass_priv(dev); + + xsize = priv->xsize; + ysize = priv->ysize; + } + startx = menu->obj.req_bbox.x0; y = menu->obj.req_bbox.y0; if (menu->title_id) { @@ -324,13 +334,17 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr, } if (item->preview_id) { + const struct scene_obj *obj; bool hide; /* * put all previews on top of each other, on the right * size of the display */ - ret = scene_obj_set_pos(scn, item->preview_id, -4, y); + obj = scene_obj_find(scn, item->preview_id, + SCENEOBJT_NONE); + ret = scene_obj_set_pos(scn, item->preview_id, + xsize - obj->dims.x - 4, y); if (ret < 0) return log_msg_ret("prev", ret); diff --git a/test/boot/expo.c b/test/boot/expo.c index 9ee2c312f86..0c7230aee7c 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -436,7 +436,7 @@ static int expo_object_menu(struct unit_test_state *uts) ut_asserteq(menu->obj.bbox.x0 + 179, desc1->obj.bbox.x0); ut_asserteq(menu->obj.bbox.y0 + 32, desc1->obj.bbox.y0); - ut_asserteq(-4, prev1->obj.bbox.x0); + ut_asserteq(-84, prev1->obj.bbox.x0); ut_asserteq(menu->obj.bbox.y0 + 32, prev1->obj.bbox.y0); ut_asserteq(true, prev1->obj.flags & SCENEOF_HIDE); @@ -690,11 +690,11 @@ static int expo_render_image(struct unit_test_state *uts) ut_assertok(scene_arrange(scn)); ut_asserteq(0, scn->highlight_id); ut_assertok(expo_render(exp)); - ut_asserteq(20366, video_compress_fb(uts, dev, false)); + ut_asserteq(20373, video_compress_fb(uts, dev, false)); ut_assertok(scene_arrange(scn)); ut_assertok(expo_render(exp)); - ut_asserteq(20366, video_compress_fb(uts, dev, false)); + ut_asserteq(20373, video_compress_fb(uts, dev, false)); scene_set_highlight_id(scn, OBJ_MENU); ut_asserteq(OBJ_MENU, scn->highlight_id); @@ -706,7 +706,7 @@ static int expo_render_image(struct unit_test_state *uts) ut_assert(!(obj->flags & SCENEOF_HIDE)); ut_assertok(expo_render(exp)); - ut_asserteq(20366, video_compress_fb(uts, dev, false)); + ut_asserteq(20373, video_compress_fb(uts, dev, false)); /* move down */ ut_assertok(expo_send_key(exp, BKEY_DOWN)); @@ -719,27 +719,27 @@ static int expo_render_image(struct unit_test_state *uts) ut_asserteq(ITEM2, scene_menu_get_cur_item(scn, OBJ_MENU)); ut_assertok(scene_arrange(scn)); ut_assertok(expo_render(exp)); - ut_asserteq(19636, video_compress_fb(uts, dev, false)); + ut_asserteq(19649, video_compress_fb(uts, dev, false)); ut_assertok(video_check_copy_fb(uts, dev)); - /* hide the text editor since the following tets don't need it */ + /* hide the text editor since the following tests don't need it */ scene_obj_set_hide(scn, OBJ_TEXTED, true); /* do some alignment checks */ ut_assertok(scene_obj_set_halign(scn, OBJ_TEXT3, SCENEOA_CENTRE)); ut_assertok(expo_render(exp)); - ut_asserteq(16308, video_compress_fb(uts, dev, false)); + ut_asserteq(16323, video_compress_fb(uts, dev, false)); ut_assertok(scene_obj_set_halign(scn, OBJ_TEXT3, SCENEOA_RIGHT)); ut_assertok(expo_render(exp)); - ut_asserteq(16242, video_compress_fb(uts, dev, false)); + ut_asserteq(16240, video_compress_fb(uts, dev, false)); ut_assertok(scene_obj_set_halign(scn, OBJ_TEXT3, SCENEOA_LEFT)); ut_assertok(scene_obj_set_valign(scn, OBJ_TEXT3, SCENEOA_CENTRE)); ut_assertok(expo_render(exp)); - ut_asserteq(18742, video_compress_fb(uts, dev, false)); + ut_asserteq(18714, video_compress_fb(uts, dev, false)); ut_assertok(scene_obj_set_valign(scn, OBJ_TEXT3, SCENEOA_BOTTOM)); ut_assertok(expo_render(exp)); - ut_asserteq(18663, video_compress_fb(uts, dev, false)); + ut_asserteq(18670, video_compress_fb(uts, dev, false)); /* make sure only the preview for the second item is shown */ obj = scene_obj_find(scn, ITEM1_PREVIEW, SCENEOBJT_NONE); @@ -765,7 +765,7 @@ static int expo_render_image(struct unit_test_state *uts) exp->show_highlight = true; ut_assertok(scene_arrange(scn)); ut_assertok(expo_render(exp)); - ut_asserteq(18842, video_compress_fb(uts, dev, false)); + ut_asserteq(18830, video_compress_fb(uts, dev, false)); /* now try in text mode */ expo_set_text_mode(exp, true);