From patchwork Mon Oct 6 16:54:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 514 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=1759769744; bh=VHbxRdoCFvOvw5t/h8/Jfwrq1gZ78VQIvdeYUKqZdcA=; 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=bEptPppXvAcKq714zFdg33jSNsFf7uvaDAJiGgFHW+JmtDP7UratdxVb+Wh7hrgqt XtfncpGlD/8o6mHy/eZXI4lLYQ9Rnmr69TIHWEzdZeI2xU3K0v9LJrh4h3p57B+dMc C4X2Z78nxkFIS/9WDWso9tv2Bsy9ezJLaUdRqqrWsOOPj8FWaFEGctSeziP0Pn/sdj 1g7bcfFCwOpHu9pWpIWSb36v1Us7jVYk4yGiQBjrLganZSKwnN+cMMLHzyI4LOw8AE glP4QWrUI3+wGdtHKKWa3PE8IPocccb8lMOZY2ziyYrFgf/MagXjkmZQb8/j1r72QP Y62AMl+eGrXdg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A8D1167F8E for ; Mon, 6 Oct 2025 10:55:44 -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 mTtL1vfxamg2 for ; Mon, 6 Oct 2025 10:55:44 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1759769744; bh=VHbxRdoCFvOvw5t/h8/Jfwrq1gZ78VQIvdeYUKqZdcA=; 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=bEptPppXvAcKq714zFdg33jSNsFf7uvaDAJiGgFHW+JmtDP7UratdxVb+Wh7hrgqt XtfncpGlD/8o6mHy/eZXI4lLYQ9Rnmr69TIHWEzdZeI2xU3K0v9LJrh4h3p57B+dMc C4X2Z78nxkFIS/9WDWso9tv2Bsy9ezJLaUdRqqrWsOOPj8FWaFEGctSeziP0Pn/sdj 1g7bcfFCwOpHu9pWpIWSb36v1Us7jVYk4yGiQBjrLganZSKwnN+cMMLHzyI4LOw8AE glP4QWrUI3+wGdtHKKWa3PE8IPocccb8lMOZY2ziyYrFgf/MagXjkmZQb8/j1r72QP Y62AMl+eGrXdg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 9775967F8B for ; Mon, 6 Oct 2025 10:55:44 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1759769742; bh=Gt7c2V8kiQDvvStYveCkLszCtFGvIdX4NZS4m0ctq3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Be/eTzAMVQdM9IJ54d5SWIJGkss/h+oBuzs0Ms6PEfnh/tJse07swYC8iz3sdnUR4 iFFHLWIRWORN/R9hNOs/9jPweYojqd7lsEuK7riC60msu1q3mrb3Ise66q+H9Y6g1S Ik4YypQ7ZJefvrrFTZRYIRzM2XpJQi/+mep/7ezhDKagNjhhhaEUonEugNnJtYDXgB A3znc+kt3yqd0X7Y+lRIw/CUHW192UONudKQJ1bjXYHswGi+HCpohpca5j6Kl7B81w I++GCtQ5HpPXMs0nNHeZQfSFxqzI0SHY7apAsRK6hmUXirxDS8/G2UNG+jkd9lhkM8 vHOkYtURGGv8w== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 5857267F03; Mon, 6 Oct 2025 10:55:42 -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 7Nxd3d3LT8UW; Mon, 6 Oct 2025 10:55:42 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1759769737; bh=x22NKH9LKI8JcrlF4HaFKZvnJx3/G7IIiOQ/Uz8d5+E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=w16DXR1GzwQvBFjGvdqJUyPRuX8E+b7rWmdTFu3VLFBI/SWNk93UOqPidHsCmAbrD 2vuwhJ5NwAnYqYfWJfRqDxTuGq/QkQktQEdXzUm4jVZq+nzwO7Uq8qwky5PTjbkRMX swBuR7jPl/7isLT1Wrp1tMmFuW1OkGLE0ZNnYUrKAi1aOPAJ+Ws3sg7AhUIq+OEmkA vtJXTTS6yLdus1b5UFrJAqfNXOB7RwfnkmFn2cxLvf4k62Yp2j3qwErmQUgaeMEH9Q PmYCYA3nLdl184IR9PShznGhWmM1bZgRpc44SHSsEguhjHeqGkXCexlLe3XL8UrgLi DWZCKzzELkIsg== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 3F94567EE4; Mon, 6 Oct 2025 10:55:37 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 6 Oct 2025 10:54:43 -0600 Message-ID: <20251006165452.1675349-12-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251006165452.1675349-1-sjg@u-boot.org> References: <20251006165452.1675349-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: O66CHDD4DLVCZFIKGFK4226TGP5DBOUN X-Message-ID-Hash: O66CHDD4DLVCZFIKGFK4226TGP5DBOUN 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 , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 11/14] expo: Set dirty flag when an object bbox changes 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 Add a flag to indicate that am object must be redrawn. Set this flag when an object's bounding box changes. Co-developed-by: Claude Signed-off-by: Simon Glass --- boot/scene.c | 7 +++++++ include/expo.h | 2 ++ test/boot/cedit.c | 21 +++++++++++++-------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/boot/scene.c b/boot/scene.c index a451ee1d325..242f21bbacf 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -1300,6 +1300,7 @@ int scene_sync_bbox(struct scene *scn) list_for_each_entry(obj, &scn->obj_head, sibling) { int req_width = obj->req_bbox.x1 - obj->req_bbox.x0; int req_height = obj->req_bbox.y1 - obj->req_bbox.y0; + struct vid_bbox old_bbox = obj->bbox; if (obj->flags & SCENEOF_SYNC_POS) { if (obj->flags & SCENEOF_SIZE_VALID) { @@ -1321,6 +1322,12 @@ int scene_sync_bbox(struct scene *scn) obj->bbox.x1 = obj->bbox.x0 + req_width; if (obj->flags & SCENEOF_SYNC_BBOX) obj->bbox = obj->req_bbox; + + /* Set dirty flag if bbox changed */ + if (old_bbox.x0 != obj->bbox.x0 || old_bbox.y0 != obj->bbox.y0 || + old_bbox.x1 != obj->bbox.x1 || old_bbox.y1 != obj->bbox.y1) + obj->flags |= SCENEOF_DIRTY; + obj->flags &= ~(SCENEOF_SYNC_POS | SCENEOF_SYNC_SIZE | SCENEOF_SYNC_WIDTH | SCENEOF_SYNC_BBOX); } diff --git a/include/expo.h b/include/expo.h index 487b58fb916..fcc090d54f1 100644 --- a/include/expo.h +++ b/include/expo.h @@ -308,6 +308,7 @@ enum scene_obj_align { * @SCENEOF_SYNC_WIDTH: object's widget has changed * @SCENEOF_SYNC_BBOX: object's bounding box has changed * @SCENEOF_MANUAL: manually arrange the items associated with this object + * @SCENEOF_DIRTY: object has been modified and needs to be redrawn * @SCENEOF_LAST: used just as a check for the size of the flags mask */ enum scene_obj_flags_t { @@ -320,6 +321,7 @@ enum scene_obj_flags_t { SCENEOF_SYNC_WIDTH = BIT(6), SCENEOF_SYNC_BBOX = BIT(7), SCENEOF_MANUAL = BIT(8), + SCENEOF_DIRTY = BIT(9), SCENEOF_LAST, /* check for size of flags below */ }; diff --git a/test/boot/cedit.c b/test/boot/cedit.c index 80150a29d37..bccc93f8926 100644 --- a/test/boot/cedit.c +++ b/test/boot/cedit.c @@ -593,20 +593,22 @@ static int cedit_mouse(struct unit_test_state *uts) ut_assertok(click_check(uts, scn, item->label_id, EXPOACT_OPEN, &act)); ut_asserteq(ID_CPU_SPEED, act.select.id); ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); - ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID, speed->obj.flags); + ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID | SCENEOF_DIRTY, + speed->obj.flags); /* click outside the label to close the menu */ ut_assertok(scene_send_click(scn, 10, 10, &act)); ut_asserteq(EXPOACT_CLOSE, act.type); ut_asserteq(ID_CPU_SPEED, act.select.id); ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); - ut_asserteq(SCENEOF_SIZE_VALID, speed->obj.flags); + ut_asserteq(SCENEOF_SIZE_VALID | SCENEOF_DIRTY, speed->obj.flags); /* click on CPU speed to open it again */ ut_assertok(click_check(uts, scn, item->label_id, EXPOACT_OPEN, &act)); ut_asserteq(ID_CPU_SPEED, act.select.id); ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); - ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID, speed->obj.flags); + ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID | SCENEOF_DIRTY, + speed->obj.flags); /* click on the second item (1.5 GHz) */ item = scene_menuitem_find_seq(speed, 1); @@ -619,7 +621,7 @@ static int cedit_mouse(struct unit_test_state *uts) /* verify that the second item is now selected and menu is closed */ ut_asserteq(ID_CPU_SPEED_2, speed->cur_item_id); - ut_asserteq(SCENEOF_SIZE_VALID, speed->obj.flags); + ut_asserteq(SCENEOF_SIZE_VALID | SCENEOF_DIRTY, speed->obj.flags); ut_asserteq(ID_CPU_SPEED, scn->highlight_id); /* click on the power loss menu to open it */ @@ -629,7 +631,8 @@ static int cedit_mouse(struct unit_test_state *uts) &act)); ut_asserteq(ID_POWER_LOSS, act.select.id); ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); - ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID, loss->obj.flags); + ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID | SCENEOF_DIRTY, + loss->obj.flags); /* click on CPU speed to open it again */ item = scene_menuitem_find_seq(speed, 0); @@ -637,7 +640,8 @@ static int cedit_mouse(struct unit_test_state *uts) &act)); ut_asserteq(ID_CPU_SPEED, act.select.id); ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); - ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID, speed->obj.flags); + ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID | SCENEOF_DIRTY, + speed->obj.flags); /* click on the lineedit */ ut_assertok(click_check(uts, scn, mach->edit_id, @@ -647,8 +651,9 @@ static int cedit_mouse(struct unit_test_state *uts) ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); ut_asserteq(ID_CPU_SPEED_2, speed->cur_item_id); ut_asserteq(ID_MACHINE_NAME, scn->highlight_id); - ut_asserteq(SCENEOF_SIZE_VALID, loss->obj.flags); - ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID, mach->obj.flags); + ut_asserteq(SCENEOF_SIZE_VALID | SCENEOF_DIRTY, loss->obj.flags); + ut_asserteq(SCENEOF_OPEN | SCENEOF_SIZE_VALID | SCENEOF_DIRTY, + mach->obj.flags); return 0; }