From patchwork Mon Sep 15 12:28:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 339 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=1757940296; bh=oFPitSppVyeww4JCve3O2uckIblYVOvwtmIr4fnl7Mo=; 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=G+5ZGAr5HbBBwnF4YWXX+3sjsC65BXzSH5ktk4INJyuKmi2Lk6wOhIzM64wIAC5sC rW/jz7kBKlJ74MudEHv9sQ/LV50xOkn2+8EsSBt7zVG7ZjYASZf82TZKTYBGOQjJ5j MV2RXhkhe1kiFj4+XmvFr6n6VuRlc4cP9OekwY+z71QYPBdtwO1RRTQkAtTPyQbjgy BvjPtJuLty5br8dykpcFnD+R0bSSJpUyiXuC8DzXAloRNTd6/pQ+WDHlE4BI64Sulz DaEHDMp/5vJmO7+E1podiN8uPg7Md31pxReJcRGZBhPENk7hTUxddF3mE0SQ1v89MZ jtH2GKGP2na/A== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 8BA0667BE2 for ; Mon, 15 Sep 2025 06:44: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 J5HgoLS9h9Au for ; Mon, 15 Sep 2025 06:44:56 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757940296; bh=oFPitSppVyeww4JCve3O2uckIblYVOvwtmIr4fnl7Mo=; 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=G+5ZGAr5HbBBwnF4YWXX+3sjsC65BXzSH5ktk4INJyuKmi2Lk6wOhIzM64wIAC5sC rW/jz7kBKlJ74MudEHv9sQ/LV50xOkn2+8EsSBt7zVG7ZjYASZf82TZKTYBGOQjJ5j MV2RXhkhe1kiFj4+XmvFr6n6VuRlc4cP9OekwY+z71QYPBdtwO1RRTQkAtTPyQbjgy BvjPtJuLty5br8dykpcFnD+R0bSSJpUyiXuC8DzXAloRNTd6/pQ+WDHlE4BI64Sulz DaEHDMp/5vJmO7+E1podiN8uPg7Md31pxReJcRGZBhPENk7hTUxddF3mE0SQ1v89MZ jtH2GKGP2na/A== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 64F0567BCB for ; Mon, 15 Sep 2025 06:44:56 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939365; bh=6NvYiptecPwuorXCEHEWmxEU/W0hGDbQaF4mzoZZ5iA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IcrofqpraoPDGC2nj3WYo+EZ4dob2vVDD8wfSqIdqcjdm3gWJfVag2VVlxMWrTmkW a+HsGbmTomJaSdkNa679gji2KS1fOapuh9rr5gczyTPsuVH0PhRrmNsCauoro4V0BW soC24XflAY1GRVfvDCz3V635Qk7OTgmUZ1A8AHBSRHgU6dPReXNPxM548fnKxSnWfr SAaEEMYUqWS4JC6gamJB5vhzmgXUhEj1alaRtwBhcODoRZfD4sJzUprg6dpeM2qihO UAA6eoCxMHuv5x/1q8RPywnHZ9iLKCHwhAo6ccrkN0ThrPfbPLykgDOYOhjQo5q4ir Bcs96Z7HtqzUw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 8535467A72; Mon, 15 Sep 2025 06:29:25 -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 xVgkuzdr46bk; Mon, 15 Sep 2025 06:29:25 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939358; bh=sDdal8H1nf0ht9XDxv0LaM4oXkCr1iWNu+xpLzNxYwg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DE9ij8EyxqUs0/stx0F8VdAya+KMNP3LxOrsHz1jxJjAJPzGsI/a40sbImKF4TKbi Ax+C47BOjs3hx0CTbWX9roHlXJp5ha8z6kX3QspWdkb9Rs/4TqyGXYCmRA+D+AXsPI InmBZEDVv/cZAPW9OZcuzQoOMxpvFRgpJPYzHlGpcXLO2RyiIrTZVNxgplhYOO0B8x P6jbsjfJPhtYrwhkMhUf/dmLiMXh95bBptuWY6vzAqln6peuXsr54B3Mbizo5ixvkR lwun8F++qhsfonE/lqWIdz6QshdV+56qn7OMgruEQ1Fu2ZdyVeKu7PzcWmBmdJFvRW Rx+0v92d7auaQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 73B5767B34; Mon, 15 Sep 2025 06:29:17 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:34 -0600 Message-ID: <20250915122905.1217249-2-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 X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Hits: max-size X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; news-moderation; no-subject; digests; suspicious-header Message-ID-Hash: 5GXIWPZT6R3RLCK2CDVPJCS4FXOY3E6V X-Message-ID-Hash: 5GXIWPZT6R3RLCK2CDVPJCS4FXOY3E6V X-Mailman-Approved-At: Mon, 15 Sep 2025 12:44:54 -0600 CC: Heinrich Schuchardt , Simon Glass X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 01/23] video: Provide a few Ubuntu fonts 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 These fonts look quite nice and are freely available. Bring in the bold and light variants so that they can be selected as needed. Signed-off-by: Simon Glass --- drivers/video/console_truetype.c | 8 +++++++ drivers/video/fonts/Kconfig | 32 +++++++++++++++++++++++---- drivers/video/fonts/Makefile | 2 ++ drivers/video/fonts/ubuntu_bold.ttf | Bin 0 -> 270164 bytes drivers/video/fonts/ubuntu_light.ttf | Bin 0 -> 362552 bytes 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 drivers/video/fonts/ubuntu_bold.ttf create mode 100644 drivers/video/fonts/ubuntu_light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b310d150ba19e8fc359ed1a41450c547c9afab8e GIT binary patch literal 362552 zcmeFa2Ygh;7cYKh=4P|m-9YG_YzV!kTvF(%^xhF6Aqhz!Br%2FL{UURR21w8h=Pcr z7ZGVHqS!?g5d>81D4^K5?>lp6mxZ4{pT5ugf8PIno_F(|K6B=rnK}2|*}D^BL{t@y zLEi2I`VanN|NfoC>Kr2agSrnMn*3VB!A(%$B2ksI{Rg*;S#bF0c|>dnYGn*d?K|R| zM=m}=)F+jw=FzN4nZ zB6BlKiz$La&|Yh_7nWNvZ9F{|5<|S^Ardzg=VectdTC(yABgUrOSG^@UQTAVJM?6I zlt-N6@{kbrMU_5?k4C(4-lVdr<32sw7r|ph)wUEAWo0^#kLgO3a2Mh`CS^`7b}eMWtoCS3O>tC<`=NXBU^`6qmj=F%5a>KeJFrkdrvo zMZ`i_itSs*sS>Rw7t+J19gQRk@;ZK@Amk!nthQ39e&}{9%gPSjCsP71<6ArBz1D@Caf9ib_(4m_8=MpDs~%!_l4Ag(6`-uA#(1reRhHp z=vSn=g&`bVaN`tlYXEs~kgdrpHK}hBbtC%C5KgN*C5YAZf|uy=VQ7~J@vSK0C9#V_ zm|%QUcDOew6f8yo-2g!uaEk$M?L~fEV){4?#^uxZ>`c?zpLIk`o687h_l#mU*>ML;2tk9aPS17rc2 zz(`;?FccUJ3Rw_?Tt{0w?R4bg4*{S67$vhe1sysV9 zw54-sP)k14K)7}Ilg+R) zlqf52ReKC(0(meO!Xz*wJVe%c;Y0|&m2P28V7AD)^8ekHL`l?%pjoH~AblTfnn^k( z0lr+%G9Gxzcz57G^JU8^$dR?|D}hGg(*>VlG=Spq0d4*n|AAUlbJp2c?EfMEM#`We zG=MuP)Vd@X1uNbw(FUpa4CrjSm))hqjB2wo9fme!<8@e2Yt})Bjes&i9ZgZ6wvN7FZIa6CkH3@SH%g<5y?-JyeVT7cNuBDx>Bw2P%ZP|tw6x)I_)E6Lt>T=d7 z-w+4kzm8ex08M$f4W$M&n?P5>>hS6uf^-}I3CaY^LugceTBcu zkMk3vinvWI6nBXw;t8=(h432T4Z_pH`-Tq>9~pi__>JMS z!ncGU41YKLc=-3>7sIc3Yk2E=8+sdgn|hCGh_kWz{=dB;cWK_SW}$ z6*q~Bn=f=4Z#OZdTD&ga5$}nQ#9QKB z@xC}JJ`l&mC*ni#u{bVHh?7#oiDgO;Wy;kBz*39B6Hc7-^D9YKcRj9RBfre}C7nr2iOO(T2sXd~m1 znMlYCNXV%0A}RgaG8JA~FB4hUl8+rZwB>cBMq7 z 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 R$Mfjm|N3>3=KtY*{sE@U4sieg literal 0 HcmV?d00001 diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c index a0458d2a6f5..f185552261c 100644 --- a/drivers/video/console_truetype.c +++ b/drivers/video/console_truetype.c @@ -530,6 +530,8 @@ FONT_DECL(nimbus_sans_l_regular); FONT_DECL(ankacoder_c75_r); FONT_DECL(rufscript010); FONT_DECL(cantoraone_regular); +FONT_DECL(ubuntu_light); +FONT_DECL(ubuntu_bold); static struct font_info font_table[] = { #ifdef CONFIG_CONSOLE_TRUETYPE_NIMBUS @@ -543,6 +545,12 @@ static struct font_info font_table[] = { #endif #ifdef CONFIG_CONSOLE_TRUETYPE_CANTORAONE FONT_ENTRY(cantoraone_regular), +#endif +#ifdef CONFIG_CONSOLE_TRUETYPE_UBUNTU_LIGHT + FONT_ENTRY(ubuntu_light), +#endif +#ifdef CONFIG_CONSOLE_TRUETYPE_UBUNTU_BOLD + FONT_ENTRY(ubuntu_bold), #endif {} /* sentinel */ }; diff --git a/drivers/video/fonts/Kconfig b/drivers/video/fonts/Kconfig index c692fa9602f..e1cbd3ff93a 100644 --- a/drivers/video/fonts/Kconfig +++ b/drivers/video/fonts/Kconfig @@ -2,11 +2,12 @@ # Video fonts # +if CONSOLE_TRUETYPE + menu "TrueType Fonts" config CONSOLE_TRUETYPE_NIMBUS bool "Nimbus Sans Regular" - depends on CONSOLE_TRUETYPE default y help Nimbus Sans L is a version of Nimbus Sans using Adobe font sources. @@ -20,7 +21,6 @@ config CONSOLE_TRUETYPE_NIMBUS config CONSOLE_TRUETYPE_ANKACODER bool "Anka Coder Narrow" - depends on CONSOLE_TRUETYPE help The Anka/Coder family is a monospaced, courier-width font for source code and terminals, in two styles and weights. Anka/Coder Narrow was @@ -32,7 +32,6 @@ config CONSOLE_TRUETYPE_ANKACODER config CONSOLE_TRUETYPE_RUFSCRIPT bool "Ruf Script" - depends on CONSOLE_TRUETYPE help A laid-back handwritten font. Font: https://fontlibrary.org/en/font/rufscript @@ -41,7 +40,6 @@ config CONSOLE_TRUETYPE_RUFSCRIPT config CONSOLE_TRUETYPE_CANTORAONE bool "Cantoraone" - depends on CONSOLE_TRUETYPE help Cantora is a friendly semi formal, semi condensed, semi sans-serif with a hint of handwriting. Perfect for headlines. @@ -49,4 +47,30 @@ config CONSOLE_TRUETYPE_CANTORAONE License: SIL Open Font Licence http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL +config CONSOLE_TRUETYPE_UBUNTU_LIGHT + bool "Ubuntu Light" + help + The Ubuntu Font Family are a set of matching libre/open fonts + developed in 2010-2011, funded by Canonical Ltd on behalf the wider + Free Software community and the Ubuntu project. The technical font + design work and implementation was undertaken by Dalton Maag. + + From https://fonts.google.com/specimen/Ubuntu + License: Ubuntu Font Licence version 1.0 + https://canonical.com/legal/font-licence + +config CONSOLE_TRUETYPE_UBUNTU_BOLD + bool "Ubuntu Bold" + help + The Ubuntu Font Family are a set of matching libre/open fonts + developed in 2010-2011, funded by Canonical Ltd on behalf the wider + Free Software community and the Ubuntu project. The technical font + design work and implementation was undertaken by Dalton Maag. + + From https://fonts.google.com/specimen/Ubuntu + License: Ubuntu Font Licence version 1.0 + https://canonical.com/legal/font-licence + endmenu + +endif # CONSOLE_TRUETYPE diff --git a/drivers/video/fonts/Makefile b/drivers/video/fonts/Makefile index 4fca120b73c..d4d92fe0ebe 100644 --- a/drivers/video/fonts/Makefile +++ b/drivers/video/fonts/Makefile @@ -7,3 +7,5 @@ obj-$(CONFIG_CONSOLE_TRUETYPE_NIMBUS) += nimbus_sans_l_regular.o obj-$(CONFIG_CONSOLE_TRUETYPE_ANKACODER) += ankacoder_c75_r.o obj-$(CONFIG_CONSOLE_TRUETYPE_RUFSCRIPT) += rufscript010.o obj-$(CONFIG_CONSOLE_TRUETYPE_CANTORAONE) += cantoraone_regular.o +obj-$(CONFIG_CONSOLE_TRUETYPE_UBUNTU_LIGHT) += ubuntu_light.o +obj-$(CONFIG_CONSOLE_TRUETYPE_UBUNTU_BOLD) += ubuntu_bold.o diff --git a/drivers/video/fonts/ubuntu_bold.ttf b/drivers/video/fonts/ubuntu_bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c2293d5c8b81de044a73eeb80e461d7df177e726 GIT binary patch literal 270164 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 AQUCw| literal 0 HcmV?d00001 From patchwork Mon Sep 15 12:28:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 317 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=1757939378; bh=RCWyKyUl3Qu/pZnYF0Sk4n3SwZtcFp89OtuI/PIllqA=; 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=Qr0+0PaychKUT4iDI+1OfzpVwlLgtZqyFNTF1H5g7uatKNhXPYPE3948TPkCILke/ JfuD5X6U1xwAqdyUUtkVs6uizGLHxML5VML7vP5rgiNGOaQHwYqPMRzwVU1w8ifBID cNvVaziRY/L5HPa+4areOF4wc+84KedDZv0GC1ElnlKQFJMiSO5xftpuLLYawBdQvt M/MIW/cZYuTU0EbxVPCaxATh0gC0k7SdyLyOlqD5y5dFLPu1YVhvYGoByFAvTi84jm EwEMZuWlF6bUR/NGH1OIvDSv6WebyedxdXD4xtdVvtRpwcArEDmahu3SFibGeD9b+U Z1hwau2UXuwcA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 1E77767BCE for ; Mon, 15 Sep 2025 06:29:38 -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 C-Ea2xkQnexA for ; Mon, 15 Sep 2025 06:29:38 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939378; bh=RCWyKyUl3Qu/pZnYF0Sk4n3SwZtcFp89OtuI/PIllqA=; 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=Qr0+0PaychKUT4iDI+1OfzpVwlLgtZqyFNTF1H5g7uatKNhXPYPE3948TPkCILke/ JfuD5X6U1xwAqdyUUtkVs6uizGLHxML5VML7vP5rgiNGOaQHwYqPMRzwVU1w8ifBID cNvVaziRY/L5HPa+4areOF4wc+84KedDZv0GC1ElnlKQFJMiSO5xftpuLLYawBdQvt M/MIW/cZYuTU0EbxVPCaxATh0gC0k7SdyLyOlqD5y5dFLPu1YVhvYGoByFAvTi84jm EwEMZuWlF6bUR/NGH1OIvDSv6WebyedxdXD4xtdVvtRpwcArEDmahu3SFibGeD9b+U Z1hwau2UXuwcA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 0CB2C67BCB for ; Mon, 15 Sep 2025 06:29:38 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939375; bh=mBBpkA9FnX4Tqi65539WXhKIwnaDadHjl2jqbODxAE4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WdLVbJ+E8xw2dH5AWV1gqOLC6/iy8pEOaNAIDGrLJHQ0Ij4rdqmCcMwkjDgXzRnBB nVxHCT8Y/q374nocoaXdqyyCj2F770XGTwQDdniQNVFQvsQsmCKglHJHrdWgBQCA8E 2cF6fhgQiypvpoG/D3mo5ySJhgucp6MEgFykjmC7LgZSHmg+PiAM8wF8o7sMnwS8WN tIXTHpCI7VaEvJAdBD4azxrdo7d/24NVVwYYQ3yx5Wfp6ZkESmWJA03TO/QgjDR6xO IcRj+tD78o1t7Of5jEnXvmE1QSgBkmyW7++8UuVje5YXrcuHJ7hiMbGKP79qG47Ubs 5eexq05DxCmNw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 5ADAB67B45; Mon, 15 Sep 2025 06:29:35 -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 jM58kOB09SMj; Mon, 15 Sep 2025 06:29:35 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939365; bh=PqFCuyBRpUYSmPFRlkD+S6q4c1D5PuJcifCgSdmgj2U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LAvqk6KYPnIaL5L26WUWnq8H4axM8+nTCWXsIASOb4Meq8BnNn5/gB+anxlQYqoOI SL6JqIV50GTYiCTpXK4hMhgHa+salkZ5ruxCgD+mwGwoBuThjFbe7pnqrT9MwrIvCK b4AOsEBiWlP72VTDjZGcjfFu0CwU45l5kK3JZ5oYKz4KLG7xZVN/VKvFLNKQI3W6ui 3JjU9Rnw8ywVXdFGm0veZtbw4OanAJfqS29aZpZwkhJcZaCBTpEPOhre7fwGhnuGW5 Glfbl7T4dY06yGLIFZwYpInAz7mxuhcjR3ItFn71h3SLF9FJ9dJx7VvqwHwQWd6821 WO3ql0tV28spw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 9001C67B3C; Mon, 15 Sep 2025 06:29:25 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:35 -0600 Message-ID: <20250915122905.1217249-3-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: UJQPXQNZQXLVTIQCXOO5W4WQESATKUM4 X-Message-ID-Hash: UJQPXQNZQXLVTIQCXOO5W4WQESATKUM4 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 02/23] video: Support drawing filled boxes 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 At present only an outline boxes is supported, albeit with a thickness parameter. Provide a way to draw a filled rectangle. Co-developed-by: Claude Signed-off-by: Simon Glass --- boot/scene.c | 2 +- drivers/video/video-uclass.c | 27 +++++++++++++++++---------- include/video.h | 3 ++- test/dm/video.c | 17 +++++++++++++---- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/boot/scene.c b/boot/scene.c index 5d2d6617491..564037b0e1a 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -681,7 +681,7 @@ static int scene_obj_render(struct scene_obj *obj, bool text_mode) struct scene_obj_box *box = (struct scene_obj_box *)obj; video_draw_box(dev, obj->bbox.x0, obj->bbox.y0, obj->bbox.x1, - obj->bbox.y1, box->width, vid_priv->colour_fg); + obj->bbox.y1, box->width, vid_priv->colour_fg, false); break; } case SCENEOBJT_TEXTEDIT: { diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index c02fd9bb958..324817aa5ce 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -218,7 +218,7 @@ int video_fill_part(struct udevice *dev, int xstart, int ystart, int xend, } int video_draw_box(struct udevice *dev, int x0, int y0, int x1, int y1, - int width, u32 colour) + int width, u32 colour, bool fill) { struct video_priv *priv = dev_get_uclass_priv(dev); int pbytes = VNBYTES(priv->bpix); @@ -233,17 +233,24 @@ int video_draw_box(struct udevice *dev, int x0, int y0, int x1, int y1, void *ptr = line; int i; - for (i = 0; i < width; i++) - fill_pixel_and_goto_next(&ptr, colour, pbytes, pbytes); - if (row < y0 + width || row >= y1 - width) { - for (i = 0; i < pixels - width * 2; i++) - fill_pixel_and_goto_next(&ptr, colour, pbytes, - pbytes); + if (fill) { + /* fill the entire row */ + for (i = 0; i < pixels; i++) + fill_pixel_and_goto_next(&ptr, colour, pbytes, pbytes); } else { - ptr += (pixels - width * 2) * pbytes; + /* draw outline only */ + for (i = 0; i < width; i++) + fill_pixel_and_goto_next(&ptr, colour, pbytes, pbytes); + if (row < y0 + width || row >= y1 - width) { + for (i = 0; i < pixels - width * 2; i++) + fill_pixel_and_goto_next(&ptr, colour, pbytes, + pbytes); + } else { + ptr += (pixels - width * 2) * pbytes; + } + for (i = 0; i < width; i++) + fill_pixel_and_goto_next(&ptr, colour, pbytes, pbytes); } - for (i = 0; i < width; i++) - fill_pixel_and_goto_next(&ptr, colour, pbytes, pbytes); line += priv->line_length; } video_damage(dev, x0, y0, x1 - x0, y1 - y0); diff --git a/include/video.h b/include/video.h index b2eaecf5866..9f891cf9d30 100644 --- a/include/video.h +++ b/include/video.h @@ -277,10 +277,11 @@ int video_fill_part(struct udevice *dev, int xstart, int ystart, int xend, * @y1: Y end position in pixels from the top * @width: width in pixels * @colour: Value to write + * @fill: true to fill the box, false to draw outline only * Return: 0 if OK, -ENOSYS if the display depth is not supported */ int video_draw_box(struct udevice *dev, int x0, int y0, int x1, int y1, - int width, u32 colour); + int width, u32 colour, bool fill); /** * video_sync() - Sync a device's frame buffer with its hardware diff --git a/test/dm/video.c b/test/dm/video.c index e48f6b078c7..8fc1a4d8b0d 100644 --- a/test/dm/video.c +++ b/test/dm/video.c @@ -911,14 +911,23 @@ static int dm_test_video_box(struct unit_test_state *uts) ut_assertok(video_get_nologo(uts, &dev)); priv = dev_get_uclass_priv(dev); + + /* test outline boxes */ video_draw_box(dev, 100, 100, 200, 200, 3, - video_index_to_colour(priv, VID_LIGHT_BLUE)); + video_index_to_colour(priv, VID_LIGHT_BLUE), false); video_draw_box(dev, 300, 100, 400, 200, 1, - video_index_to_colour(priv, VID_MAGENTA)); + video_index_to_colour(priv, VID_MAGENTA), false); video_draw_box(dev, 500, 100, 600, 200, 20, - video_index_to_colour(priv, VID_LIGHT_RED)); + video_index_to_colour(priv, VID_LIGHT_RED), false); ut_asserteq(133, video_compress_fb(uts, dev, false)); - ut_assertok(video_check_copy_fb(uts, dev)); + + /* test filled boxes */ + video_draw_box(dev, 150, 250, 200, 300, 0, + video_index_to_colour(priv, VID_GREEN), true); + video_draw_box(dev, 350, 250, 400, 300, 0, + video_index_to_colour(priv, VID_YELLOW), true); + + ut_asserteq(175, video_compress_fb(uts, dev, false)); return 0; } From patchwork Mon Sep 15 12:28:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 318 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=1757939380; bh=G5hXVb3iyaEzOO2Hq5YmEDBbvraYRXP8S1ZYTePfwGs=; 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=WqnTqcoYZf+w/MZHGID1bFa1Ll7foU4H7FdWNWmlzvR+vFLbfDcDxzaki2rAFKHnP rhHzKFi/xiEyZJ28+F9l+zJdErGOAvAU4/y/D23DleptHQ73hY0YLkTqv0e8gBiDZo nH0zvPJZH6Ff//73f97DecAP+qg7Wa05NysSSO5gcIEp9OHFB4Z3ziAy3Zorwbab/y /8JqvmbzfYCM+sXU7m33BTSWYTPdNmk+DPEABIRGiPl3qxuUmoTVyNCtflrx1soSvQ HQlwdFQ6IRbXy79ltis9o0xh4ynPQ+KC50/05D43me9C43fNrqfzWkE1oDrOBrjvm1 hZ/cqwl6Guo3A== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A0C2867B3C for ; Mon, 15 Sep 2025 06:29:40 -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 6_NvBvqtKEqD for ; Mon, 15 Sep 2025 06:29:40 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939379; bh=G5hXVb3iyaEzOO2Hq5YmEDBbvraYRXP8S1ZYTePfwGs=; 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=pve6Lp2ZugAeFKguRwDgUANajt+fXlGMIT/WHFfxAIGnsuKOcEoJ9RXrkYuy4ZWDx OnPSIOjTmYQ6Jlz0OhZjyITyYs0jB/ht7z6msIePVvXfcC1Gpz5VGSMx5c2l/nN6cp dytzyJUcbxr5/m0cPSQXRNrf702dRanVw0D7ylDeh/4+bvMWt6fjx9whAdzW+GtAei tFixjS/Mqb7bF5I/8sPIbywFYkni4UCkN+2y0xdQbb9yGXuVa5dTiAfx8c7OHJrRk5 1uGL1XAgegNJRDrWTct2ogzeKWk+ClFbS1Sr8+GzjBcdnclYnqxt2CL8NlcN0+R9Ao JlbkvDuxdyoyw== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id EA0FD67BCE for ; Mon, 15 Sep 2025 06:29:39 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939377; bh=wms5hR+7XJhOkBI6wUPGaw+thMemONdeZuMM7HRJNAg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=v2QGEgMXImD93GzKHHzMKJ9GqA1skJfctpvlXcsbt7+4ELySAnRoKVKvFA1yhz//0 X8TJzGblxjwWtzLt3CKKThFDpakvIJxAncEU87PimYBY/6/W5Zgdef3Flz3X5UdmRw IPPgLUxc26xdeOZzyiRuuDqJ7sKe4OT69cQMAxFkvoRSAREXzVc+mo+jHP3IZSY4Yt tez0kHAirztBThijHGXvljH35h8knhHCJywdrIeE7haRAPq2zs7/BzGIXY9l6A0JDy PN/xP9K4R+3QsVzIK+jfPP5ovOnUQv/kBX/8PSaETi8A/6ojNzkN/RkA55/MXA5r6s enWeyTVSdJ+vw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 5FB2267B45; Mon, 15 Sep 2025 06:29:37 -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 wfXmolPZqAr6; Mon, 15 Sep 2025 06:29:37 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939375; bh=RuoBCAkUifMi64jUfb9yTHZPPKNQHGkOiiUWfOrntFk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gZQqkg2R51WOMajlqbBI9yar4eJEyir2AI2z7kOErTRzf+fL5rNyLScpuwCgwvE4h UFDDpZoc2iZ/ZoP/lXcXHx7yL3y1oW3IH9658Amemq+P6uH+Hdx8MqevGEHVuvYnDi dWUg+6Lq+V/KIfhX3JFkNpiAZNhxKh7pjDIqX6wk9PsBIVpVtvlZ+SGr1zMqi988q8 rRWyzKVovXn0P4C26YZwRLZXea6WobBz17rabeqLu4IikMTC/9zz5U3G5qb1XOkX+3 MZWh/Ea49vcDg4nH+dHP3+5/IgAtXziXRN+oKrMlauTqq43OvLYE9SXksHX099yI8z OSWCXx7Lm0uNQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 9A61D67B3C; Mon, 15 Sep 2025 06:29:35 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:36 -0600 Message-ID: <20250915122905.1217249-4-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: QPQQ2PGICGPQMY5DWDLC5VC35RPM2OFL X-Message-ID-Hash: QPQQ2PGICGPQMY5DWDLC5VC35RPM2OFL 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 03/23] expo: Guard against a crash in scene_textline_calc_dims() 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 If there is no console (e.g. in a test) this function segfaults. Add the console as a parameter so it is clear that it is needed. Check for it in the caller. Signed-off-by: Simon Glass --- boot/scene.c | 6 +++++- boot/scene_internal.h | 5 ++++- boot/scene_textline.c | 7 ++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/boot/scene.c b/boot/scene.c index 564037b0e1a..493f2bbab97 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -1114,7 +1114,11 @@ int scene_calc_dims(struct scene *scn) struct scene_obj_textline *tline; tline = (struct scene_obj_textline *)obj; - ret = scene_textline_calc_dims(tline); + if (!scn->expo->cons) + continue; + + ret = scene_textline_calc_dims(tline, + scn->expo->cons); if (ret) return log_msg_ret("men", ret); diff --git a/boot/scene_internal.h b/boot/scene_internal.h index ba05e05d99a..eada390275c 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -21,6 +21,7 @@ struct scene_obj_menu; struct scene_obj_textline; struct scene_obj_txtedit; struct scene_txt_generic; +struct udevice; struct vidconsole_bbox; enum scene_obj_t; @@ -380,9 +381,11 @@ int scene_dims_union(struct scene *scn, uint id, struct scene_obj_dims *dims); * Updates the width and height of the textline based on its contents * * @tline: Textline to update + * @cons: UCLASS_VIDEO_CONSOLE device (cannot be NULL) * Returns 0 if OK, -ENOTSUPP if there is no graphical console */ -int scene_textline_calc_dims(struct scene_obj_textline *tline); +int scene_textline_calc_dims(struct scene_obj_textline *tline, + struct udevice *cons); /** * scene_menu_calc_bbox() - Calculate bounding boxes for the menu diff --git a/boot/scene_textline.c b/boot/scene_textline.c index acaf3d91bbc..4a77cc652a8 100644 --- a/boot/scene_textline.c +++ b/boot/scene_textline.c @@ -60,7 +60,8 @@ void scene_textline_calc_bbox(struct scene_obj_textline *tline, edit_bbox); } -int scene_textline_calc_dims(struct scene_obj_textline *tline) +int scene_textline_calc_dims(struct scene_obj_textline *tline, + struct udevice *cons) { struct scene *scn = tline->obj.scene; struct vidconsole_bbox bbox; @@ -71,8 +72,8 @@ int scene_textline_calc_dims(struct scene_obj_textline *tline) if (!txt) return log_msg_ret("dim", -ENOENT); - ret = vidconsole_nominal(scn->expo->cons, txt->gen.font_name, - txt->gen.font_size, tline->max_chars, &bbox); + ret = vidconsole_nominal(cons, txt->gen.font_name, txt->gen.font_size, + tline->max_chars, &bbox); if (ret) return log_msg_ret("nom", ret); From patchwork Mon Sep 15 12:28:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 319 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=1757939383; bh=RwsuodmC0+L1/lwZ1NXnEhJgKPE7McAChv/uXH8l4sA=; 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=vbn0rAlHPwwkaXkH7lFqUeKvsdtV6x55z6EWCJYd40Hc/bXMo6g7cbmZ/YxprNPNg l6yZ618QwRaAPTmVD560PtFYR2hR7hp0bp00WSWoDRQ8qfkyuLoVSmwW6PqMD7rS4A RW8vBzu5L62CmsMoYdbkOq2vcZ2ctXG5QlhlrH6ocsvFwNQJhYGR0dtKg6iIxXYOu2 /PR8DC/JwdcLVFME0ypDgsJdaUJtbMWGBSaYIVqkRB0CsaJCOh2B1ogFDVbmwNY5AA SN+KX7soN+Stu5xXe+cb+P/347wu5i+jwrzZcI+77IgRVEJov3yID7dqtvptrfdq7i n8UWrKA6tyomg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id AA45567BCB for ; Mon, 15 Sep 2025 06:29:43 -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 bnciDcfibpzz for ; Mon, 15 Sep 2025 06:29:43 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939383; bh=RwsuodmC0+L1/lwZ1NXnEhJgKPE7McAChv/uXH8l4sA=; 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=vbn0rAlHPwwkaXkH7lFqUeKvsdtV6x55z6EWCJYd40Hc/bXMo6g7cbmZ/YxprNPNg l6yZ618QwRaAPTmVD560PtFYR2hR7hp0bp00WSWoDRQ8qfkyuLoVSmwW6PqMD7rS4A RW8vBzu5L62CmsMoYdbkOq2vcZ2ctXG5QlhlrH6ocsvFwNQJhYGR0dtKg6iIxXYOu2 /PR8DC/JwdcLVFME0ypDgsJdaUJtbMWGBSaYIVqkRB0CsaJCOh2B1ogFDVbmwNY5AA SN+KX7soN+Stu5xXe+cb+P/347wu5i+jwrzZcI+77IgRVEJov3yID7dqtvptrfdq7i n8UWrKA6tyomg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 9414467BC8 for ; Mon, 15 Sep 2025 06:29:43 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939380; bh=bJG1hVL5BPc/pk8ySbGDFyBmJDm8Sv4f2/qgTqJNJRs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jst+J+qw/2ExtzkFdWmhFVykCaMNyGRTmS9KFzIBU2uyHGu/61MZTuOnsy8vg7csp GK31IYgPtW+3jwz/hkO7nl6ZxPNNfsIW/+XgyKbWQV0ZigDvt/Lgs0cCQkp371ujly 8DwZrC6Yvyp2XXm65GObhV1OlZlr+QwNiPbLPfOZytDmrTxrIbF22wo+R3aYfAM/LT RtyyK9K9600B3Avr7rTRdT6UGhDA2V++GKhP8fycw8cdG8rGJoMdIKiieyL2ZZambm aicU1/oNKk1ENWYbLBTY6owz2gPwIBAS7b3X2wg+zVF8fUc0sIGf92ni/T95ENvH43 LzrC7FQ99criw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 7846267BD7; Mon, 15 Sep 2025 06:29:40 -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 HOfSD8QhMKLh; Mon, 15 Sep 2025 06:29:40 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939377; bh=9A8yb7Ycloof+EM4BWGqp6D3MDsQ+tP5DVf6WH8BcyU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QxjrHmweh3hAZKmd+t8i6vCqiqc2h6E1/CSgqp6C0Fl5zpn3EddRUgfk/6gPqs/zL 6x8f8KiShUjBIglczW7oBN0YmMeKAp3kxWjGyB0lTfx25fQ5ANdO0ks6vy6LVOeoz5 6s8x46Q44ZxK/WXA9c51r6zFZSCMnzNHjE7/aFaEcoFA6mVthuohMf6VOwHCHKDEaY 9CNbCd0Tn6Fo0zYcPxVSBQV9TsqAf51n1SQMqH75hb25e0x+Zchmy8T5bGxdWWiFDv qRF6T1rjq6s8e3gqBKnziEA6m02dENZxugdbGN7ZApM+wYFpfhBxcWz10wi6VzlDZP NNipumtyNeKFA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 9E74867B3C; Mon, 15 Sep 2025 06:29:37 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:37 -0600 Message-ID: <20250915122905.1217249-5-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: ZWUC2NWHGOGQIWK6F5RDKGSFYH4AAOVP X-Message-ID-Hash: ZWUC2NWHGOGQIWK6F5RDKGSFYH4AAOVP 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 04/23] expo: Support boxes fully 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 At present boxes are not supported in the expo_build format. Also, it is now possible to draw filled boxes, a recently added feature to the video API. Expand the box feature slightly to resolve these two items. Co-developed-by: Claude Signed-off-by: Simon Glass --- arch/sandbox/dts/cedit.dtsi | 13 +++++++++++++ boot/bootflow_menu.c | 2 +- boot/expo_build.c | 30 ++++++++++++++++++++++++++++++ boot/scene.c | 18 ++++++++++++++++-- doc/develop/expo.rst | 16 ++++++++++++++++ include/expo.h | 15 ++++++++++++++- include/test/cedit-test.h | 5 ++++- test/boot/expo.c | 37 +++++++++++++++++++++++++++++++++++-- 8 files changed, 129 insertions(+), 7 deletions(-) diff --git a/arch/sandbox/dts/cedit.dtsi b/arch/sandbox/dts/cedit.dtsi index facd7a49bef..b4408eeefd8 100644 --- a/arch/sandbox/dts/cedit.dtsi +++ b/arch/sandbox/dts/cedit.dtsi @@ -62,6 +62,19 @@ title = "Machine name"; edit-id = ; }; + + test-box { + type = "box"; + id = ; + width = <5>; + }; + + test-box-filled { + type = "box"; + id = ; + width = <3>; + fill; + }; }; }; diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c index 5e0e365d12b..dc075a8f4b2 100644 --- a/boot/bootflow_menu.c +++ b/boot/bootflow_menu.c @@ -55,7 +55,7 @@ int bootflow_menu_new(struct expo **expp) if (ret < 0) return log_msg_ret("scn", ret); - ret = scene_box(scn, "box", OBJ_BOX, 2, NULL); + ret = scene_box(scn, "box", OBJ_BOX, 2, false, NULL); if (ret < 0) return log_msg_ret("bmb", ret); ret |= scene_obj_set_bbox(scn, OBJ_BOX, 30, 90, 1366 - 30, 720); diff --git a/boot/expo_build.c b/boot/expo_build.c index 9a99a21e5e0..f8ae5bcbbf7 100644 --- a/boot/expo_build.c +++ b/boot/expo_build.c @@ -282,6 +282,34 @@ static int menu_build(struct build_info *info, ofnode node, struct scene *scn, return 0; } +static int box_build(struct build_info *info, ofnode node, + struct scene *scn, uint id, struct scene_obj **objp) +{ + struct scene_obj_box *box; + const char *name; + u32 width; + bool fill; + int ret; + + name = ofnode_get_name(node); + + info->err_prop = "width"; + ret = ofnode_read_u32(node, "width", &width); + if (ret) + return log_msg_ret("wid", -ENOENT); + + /* fill property is optional, defaults to false */ + fill = ofnode_read_bool(node, "fill"); + + ret = scene_box(scn, name, id, width, fill, &box); + if (ret < 0) + return log_msg_ret("box", ret); + + *objp = &box->obj; + + return 0; +} + static int textline_build(struct build_info *info, ofnode node, struct scene *scn, uint id, struct scene_obj **objp) { @@ -354,6 +382,8 @@ static int obj_build(struct build_info *info, ofnode node, struct scene *scn) ret = menu_build(info, node, scn, id, &obj); else if (!strcmp("textline", type)) ret = textline_build(info, node, scn, id, &obj); + else if (!strcmp("box", type)) + ret = box_build(info, node, scn, id, &obj); else ret = -EOPNOTSUPP; if (ret) diff --git a/boot/scene.c b/boot/scene.c index 493f2bbab97..0a62dc6212b 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -212,7 +212,7 @@ int scene_txt_str(struct scene *scn, const char *name, uint id, uint str_id, } int scene_box(struct scene *scn, const char *name, uint id, uint width, - struct scene_obj_box **boxp) + bool fill, struct scene_obj_box **boxp) { struct scene_obj_box *box; int ret; @@ -224,6 +224,7 @@ int scene_box(struct scene *scn, const char *name, uint id, uint width, return log_msg_ret("obj", ret); box->width = width; + box->fill = fill; if (boxp) *boxp = box; @@ -231,6 +232,19 @@ int scene_box(struct scene *scn, const char *name, uint id, uint width, return box->obj.id; } +int scene_box_set_fill(struct scene *scn, uint id, bool fill) +{ + struct scene_obj_box *box; + + box = scene_obj_find(scn, id, SCENEOBJT_BOX); + if (!box) + return log_msg_ret("find", -ENOENT); + + box->fill = fill; + + return 0; +} + int scene_txt_set_font(struct scene *scn, uint id, const char *font_name, uint font_size) { @@ -681,7 +695,7 @@ static int scene_obj_render(struct scene_obj *obj, bool text_mode) struct scene_obj_box *box = (struct scene_obj_box *)obj; video_draw_box(dev, obj->bbox.x0, obj->bbox.y0, obj->bbox.x1, - obj->bbox.y1, box->width, vid_priv->colour_fg, false); + obj->bbox.y1, box->width, vid_priv->colour_fg, box->fill); break; } case SCENEOBJT_TEXTEDIT: { diff --git a/doc/develop/expo.rst b/doc/develop/expo.rst index 5bdaffb14bb..5c2e3157c8f 100644 --- a/doc/develop/expo.rst +++ b/doc/develop/expo.rst @@ -366,6 +366,9 @@ type "textline" A line of text which can be edited + "box" + A rectangle with a given line width (not filled) + id type: u32, required @@ -443,6 +446,19 @@ max-chars: Specifies the maximum number of characters permitted to be in the textline. The user will be prevented from adding more. +Box nodes have the following additional properties: + +width + type: u32, required + + Specifies the line width of the box in pixels. + +fill + type: bool, optional + + Specifies whether to fill the box (true) or draw outline only (false). + Defaults to false if not specified. + Expo layout ~~~~~~~~~~~ diff --git a/include/expo.h b/include/expo.h index 522f6a93f98..c025e5494a1 100644 --- a/include/expo.h +++ b/include/expo.h @@ -495,10 +495,12 @@ struct scene_obj_textline { * * @obj: Basic object information * @width: Line-width in pixels + * @fill: true to fill the box, false to draw outline only */ struct scene_obj_box { struct scene_obj obj; uint width; + bool fill; }; /** @@ -809,11 +811,22 @@ int scene_textline(struct scene *scn, const char *name, uint id, uint max_chars, * @name: Name to use (this is allocated by this call) * @id: ID to use for the new object (0 to allocate one) * @width: Line-width in pixels + * @fill: true to fill the box, false to draw outline only * @boxp: If non-NULL, returns the new object * Returns: ID number for the object (typically @id), or -ve on error */ int scene_box(struct scene *scn, const char *name, uint id, uint width, - struct scene_obj_box **boxp); + bool fill, struct scene_obj_box **boxp); + +/** + * scene_box_set_fill() - Set the fill property of a box object + * + * @scn: Scene containing the box + * @id: ID of the box object to update + * @fill: true to fill the box, false to draw outline only + * Returns: 0 if OK, -ENOENT if the object is not found or is not a box + */ +int scene_box_set_fill(struct scene *scn, uint id, bool fill); /** * scene_texted() - create a text editor diff --git a/include/test/cedit-test.h b/include/test/cedit-test.h index 0d38a953415..ec4f3cc0322 100644 --- a/include/test/cedit-test.h +++ b/include/test/cedit-test.h @@ -27,6 +27,9 @@ #define ID_MACHINE_NAME 17 #define ID_MACHINE_NAME_EDIT 18 -#define ID_DYNAMIC_START 19 +#define ID_TEST_BOX 19 +#define ID_TEST_BOX_FILLED 20 + +#define ID_DYNAMIC_START 21 #endif diff --git a/test/boot/expo.c b/test/boot/expo.c index 9c3eb984f97..634bab8f203 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -570,11 +570,11 @@ static int expo_render_image(struct unit_test_state *uts) ut_assertok(scene_obj_set_pos(scn, OBJ_MENU, 50, 400)); - id = scene_box(scn, "box", OBJ_BOX, 3, NULL); + id = scene_box(scn, "box", OBJ_BOX, 3, false, NULL); ut_assert(id > 0); ut_assertok(scene_obj_set_bbox(scn, OBJ_BOX, 40, 390, 1000, 510)); - id = scene_box(scn, "box2", OBJ_BOX2, 1, NULL); + id = scene_box(scn, "box2", OBJ_BOX2, 1, false, NULL); ut_assert(id > 0); ut_assertok(scene_obj_set_bbox(scn, OBJ_BOX, 500, 200, 1000, 350)); @@ -880,6 +880,39 @@ static int expo_test_build(struct unit_test_state *uts) count = list_count_nodes(&menu->item_head); ut_asserteq(3, count); + /* check the box */ + struct scene_obj_box *box = scene_obj_find(scn, ID_TEST_BOX, SCENEOBJT_NONE); + ut_assertnonnull(box); + obj = &box->obj; + ut_asserteq_ptr(scn, obj->scene); + ut_asserteq_str("test-box", obj->name); + ut_asserteq(ID_TEST_BOX, obj->id); + ut_asserteq(SCENEOBJT_BOX, obj->type); + ut_asserteq(0, obj->flags); + ut_asserteq(5, box->width); + ut_asserteq(false, box->fill); + + /* check the filled box */ + struct scene_obj_box *filled_box = scene_obj_find(scn, ID_TEST_BOX_FILLED, SCENEOBJT_NONE); + ut_assertnonnull(filled_box); + obj = &filled_box->obj; + ut_asserteq_ptr(scn, obj->scene); + ut_asserteq_str("test-box-filled", obj->name); + ut_asserteq(ID_TEST_BOX_FILLED, obj->id); + ut_asserteq(SCENEOBJT_BOX, obj->type); + ut_asserteq(0, obj->flags); + ut_asserteq(3, filled_box->width); + ut_asserteq(true, filled_box->fill); + + /* test scene_box_set_fill() function */ + ut_assertok(scene_box_set_fill(scn, ID_TEST_BOX, true)); + ut_asserteq(true, box->fill); + ut_assertok(scene_box_set_fill(scn, ID_TEST_BOX_FILLED, false)); + ut_asserteq(false, filled_box->fill); + + /* test error case */ + ut_asserteq(-ENOENT, scene_box_set_fill(scn, 9999, true)); + /* try editing some text */ ut_assertok(expo_edit_str(exp, txt->gen.str_id, &orig, ©)); ut_asserteq_str("2 GHz", orig.data); From patchwork Mon Sep 15 12:28:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 320 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=1757939385; bh=R4YAOwSaU+UgBbMZv37ayLzwaOw46u16J/rVZ/EhJNI=; 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=GpNzieD8dUSgCUd01YQqzYo+qM4Yxp6ncr8miX5Ig1FeyXCeUVBUvZCTsvXbYw6HK iDzDHqsuTdA7u2u8soBTxsiwTNyAsApUw1UKZ/albDdATLqoBgbIR2Zdtz8cJ72Uh0 E0Ba1Q427G4N5f048MnT3MhO57pJ/wsSee7JYV21S+GuM0FczekyzwJ4Qz5NjW7utX DPj2xKKRQLfiOiN5IC0ErQU6Ca4Dhzu0BViB+3cIkf7I/cN1C8pnIIB+bzNmqvktpg MWrxuYa6JC0S4A2a72keX69MUVqhLwetA2ihkkSr01AzgDShBpltT5Eumu/75b32g6 r+znT92LCoDSQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2A63E67BD5 for ; Mon, 15 Sep 2025 06:29:45 -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 Ke03GMi15fTy for ; Mon, 15 Sep 2025 06:29:45 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939384; bh=R4YAOwSaU+UgBbMZv37ayLzwaOw46u16J/rVZ/EhJNI=; 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=LawvMqaeSyjloXXKvp28GgPOgM5oFTlN1WnuL4SB4kRB475Y4d1KeQgnY8eb8ioMC xNXGc8x8oP7CEO3T0RdYdLnHKJy5WyvDthcUozE9zHPo12xu0X1XzmIqGV+W4IRuGo MkN8iAl8vI8Pf6yvZNahnEcfc8RHlhn3FZb1zCI50HllDDBu2O2mrWj1BcvSbh+B9e uTnJ7DyayFUj/tEX/BvTHvILqe+ZybX+YnpoHOYPdM2huF1bjK6filzhtM4907aSpv pemFEkwzvC4b2HnJSkp+lWXmy4TqP9oD4Zdww2arOlA9b9sn97GifsZFf8MtXCrdkd OijMA9XX9PsnA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 1AE9C67BCC for ; Mon, 15 Sep 2025 06:29:44 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939380; bh=ll4MD3ibzDGbU7NxUvdb8qghzkAMejJEvUOa/50UsLo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tlQ8DCQ1UxGDrp1NB8J6jmEO1x3nc4nis+3VoOfR9zOJZwdxKAWJZ2BVw/te4WuFm e0jYaTszdwWU7nWAjhRvvn6k8GgEfqnVeoSg4ufbRbn9WoGPbu7kfwkutlvQ/jH8bZ rWX8yez+r0VKMU+AifxOB134Fvb7pe7bpTlyTEGmsnSsq35a24Ti+thu/TfwerIe3U WN+52iiaSn+uhotyw/Rr2LF8IhZOtGbjyV4Cb32pUI8cnrFZBKR2mD9ofPO8QvfcsZ hYV60ESfZ4p2XtTAp8CZJGTczHiqpTk5PG78XQbrNQmAPvEV3VEx01IPwArl+A498Z y+pF8rvth9Qkg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A7E6D67BAC; Mon, 15 Sep 2025 06:29:40 -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 ETXco1zmqTDc; Mon, 15 Sep 2025 06:29:40 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939379; bh=omh60+MLswYXaDAYqyYsWt3Epa71H2biwyd3adKpQUo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RX69rqnJE/FpEUzEZlyR8Uy69UHSwDOiEya7IFgCDJNLEJrniJFhJKqHIk0rDn4ov ceLPQy1hll5AeWbb+wRK4rEv64bt971ndvO6dv/C1RENpIdstBEh3p2TuhklsaEcEi 5xV+LkUsp4dSbboRcSTsZThjHwEMysafaW1VVuMG4CSSBxyDE/ZASqA/UHROrN65yC /Gd5uvPIKQhYj6zGtcJrixX45o+2JLzjUe6aRTyAIYkgobGtlVfVFTeMuc2YbSXT2h f6pU7VTH87drskUkh1aKOyg2VQnMysxlQtIAPUgtn90GnJpXruexBZ2D5eT0/SjM4K rdA9LrSJrJtGQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id D354067B44; Mon, 15 Sep 2025 06:29:38 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:38 -0600 Message-ID: <20250915122905.1217249-6-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: P2O67EWPLBI3GZ74UOCBVMN4IUGBYTID X-Message-ID-Hash: P2O67EWPLBI3GZ74UOCBVMN4IUGBYTID 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 05/23] test: video: Provide an easy way to watch video tests 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 video tests run past too quickly to see what is going on. Update them to introduce a delay after each check of the screen contents, when LOG_DEBUG is enabled. Signed-off-by: Simon Glass --- test/dm/video.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/dm/video.c b/test/dm/video.c index 8fc1a4d8b0d..513134dd445 100644 --- a/test/dm/video.c +++ b/test/dm/video.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +70,10 @@ int video_compress_fb(struct unit_test_state *uts, struct udevice *dev, if (ret) return ret; + /* provide a useful delay if #define LOG_DEBUG at the top of file */ + if (_DEBUG) + mdelay(300); + return destlen; } From patchwork Mon Sep 15 12:28:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 321 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=1757939387; bh=Kal1YGWWq7+eCwv+Mbj2c0zWo7QLc6mSMzs1yiD/jYA=; 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=VWzk0hhrs8rZzacKEIU7LtvaIHGGmQ7nCTk5frmCNXLYXRxj7dJarl1qDmd5HTKIH RVXdKfNcEoDxJ9HuFLwHjD4kb4lNHXmw/8UiusoSJkHkXBb7QeurY8l8hY7wt+3VQW HqypIDc50jWDKV9XPkn/WPyAW5ydxJD42YE3GJe29+OYXdgt4ifZkkZBRXuBeIa4hf WXDp6vL1B3+5yT7fLdspNqHcRg3udhibWwzMkSqKfUrwNuRUkNEd6uhJ+T0W3cc2PL B2AAqzkYX2NTy4oiptUqBwb0CvogBL1RBS5O7ZAxpdfQCFtwnrTdFINoZZAs/5EffY Vhm3fY+oN2laA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 7992B67BAC for ; Mon, 15 Sep 2025 06:29:47 -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 4fVBzCBWT9aK for ; Mon, 15 Sep 2025 06:29:47 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939386; bh=Kal1YGWWq7+eCwv+Mbj2c0zWo7QLc6mSMzs1yiD/jYA=; 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=q/kgeQVjNcKxBdp2zCLZm56FCIZgv6rl5SXEKXj53NmjqLMIFN8uytkkZB7M1Izl6 w8hC12NhE8ueD8nGbOu8KoPEXTmh7GNUhk4fEHgBYnrvbLUQPt9rfT9+sefmFQQyTL JxpYKWT77GSggb0ljgp8i97/ujWajCL6+V83PEYL/9sQNW347gOt7fE6WXkIPWJQEY HCnjm4YXBDxYkqwsA4o7CTenMs2Q4ntTCdkoNzdIzj8Ya7HBpTwn2AUmTWStmbkNLA SmxLBz1PLr1ll0DOvf/jQQd7JB3zdX5JST0WD5vKtV+G2PB9AtnZtB7KoOysorOkKn tIb+Qfw2lDeew== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 8343B67BC8 for ; Mon, 15 Sep 2025 06:29:46 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939385; bh=ZaqQ76f4IjdgrysuAtOjFOs9iXi5mLjl4NBjSR7vpcw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uZKLIYj5uMoTBoKtq6HaRfqvt82kdCL4Wzd66krCqUzeHwiwmlMywoACIo4WfFoPg 5Bn8yoUtspGjv83SLx1+ZR7QafdPoeCRzZfmWPHMQ5Fg+FgS+HoZ5EBigIZo6dw5oU pRjMY3s4PFZQ7ATgV7WYF8SaN12p+bhikDsDq2xEJA5X7ccR8JVJ4FyUocZ3hFTB3l C1njvNvJPlci+Y+yMWW2Lrpa1LsJUZ8hw5R78YYcAxmGkDhkyGoqarkjwImQXRg0Ul N3pWtYGZP4DmCzUmMoypXNfghunu2QV+nS45bizLOgRPjeOJ6MFYj+9fpGhr0ux/S+ I3FBSbJnYj6Yw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2EAA367BCC; Mon, 15 Sep 2025 06:29:45 -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 HaLDmARqAV77; Mon, 15 Sep 2025 06:29:45 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939379; bh=nMXgbSEc9FouWbrA4QaScy3pfCcKajv+2lwm8IRkG2o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FyWb9O5ERTOR5YEHFAgA2cLL8YCTnQDYVH7p+Z0R+Vz9kZsc8q3R+OXoedeAyycRC XwHTI694huh6zdJw8/3W1+gEAQ0WGKgayE2z/wiYbuoV97kL+PQTBvI8fwb1iYO1AH a0j7Iua0ZmHDMaerzttQx3kowKUGfkCY8h96C0d1+NxlzIjuFBiAMEt1oCMMcg4fzJ xJr9KgWNLDR9e5gQLQPFFiaL2wd1Vq/zVLNcz56VAN4uR2hFfg4dg9t1FjgyLisqLu K5aILW9nf04WuTFBjyE24lfccUQYruKHXTKzmiFJnIWV02iWQgi7DRCXm79d7x5ri5 mFnJGl+oCpWHw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 9A07D67B45; Mon, 15 Sep 2025 06:29:39 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:39 -0600 Message-ID: <20250915122905.1217249-7-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: 25TCOW2ITUE3N4OYOSVDRAC7CIEAGCW3 X-Message-ID-Hash: 25TCOW2ITUE3N4OYOSVDRAC7CIEAGCW3 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 06/23] expo: Tidy up a few key-related comments 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 Fix up send_key_obj() to mention a missing argument. Add a bit more detail in scene_send_key() to explain what 'processing' means. Signed-off-by: Simon Glass --- boot/scene.c | 1 + boot/scene_internal.h | 3 +++ 2 files changed, 4 insertions(+) diff --git a/boot/scene.c b/boot/scene.c index 0a62dc6212b..50a7dfb22a1 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -909,6 +909,7 @@ int scene_render(struct scene *scn) * send_key_obj() - Handle a keypress for moving between objects * * @scn: Scene to receive the key + * @obj: Object to receive the key * @key: Key to send (KEYCODE_UP) * @event: Returns resulting event from this keypress * Returns: 0 if OK, -ve on error diff --git a/boot/scene_internal.h b/boot/scene_internal.h index eada390275c..c6f2615a2c5 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -231,6 +231,9 @@ int scene_render(struct scene *scn); /** * scene_send_key() - set a keypress to a scene * + * This processes the key, taking any action that is needed, such as moving + * between menu items or editing the text in a textline + * * @scn: Scene to receive the key * @key: Key to send (KEYCODE_UP) * @event: Returns resulting event from this keypress From patchwork Mon Sep 15 12:28:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 322 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=1757939389; bh=yzAKrcM2b9GXXsBqb2IwEG3rhBQlLBEPrC3YdywAGD8=; 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=eqF92Y647IEQNt4SeJvU6wdII7UOpLpqcgI3EoGx4HcsjJzsM5wgIyCHcSaEuP7gA hbDpAssH8TG6TlYuSaDD1LiWY0xPIlLWHVynaevcWEs3c/i6Bmgvc1/n2pzsrekMFB hXbz8pabzqeiNzsUvwafuKhPWQZq6pH82G8gv4TRAWnRTbi+Tbp4KraBMlssexo/0+ XNCiHcTKc8pacTl8PWxphjihxKir6LicAIKOOAMzjltqCTc1B7coR8lwK+UwHujIDu Jm5h3x2KR1I7DHi5rKEBOBGcRHMm/XFwm6a8F2Zslp2FEkUEqLoX6xP8YyDORYYjrX EnyiPSisCstSw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id B6D2E67BCA for ; Mon, 15 Sep 2025 06:29:49 -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 SngQnippfvH7 for ; Mon, 15 Sep 2025 06:29:49 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939388; bh=yzAKrcM2b9GXXsBqb2IwEG3rhBQlLBEPrC3YdywAGD8=; 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=B6rX3QbPRmuGIAAv+HlXxIP55v7bdtajxa6VmbS7YaIg3ozqluRz12UIg4bzx+Pn3 Q9Xte4+LQW5fzK9H9Sg+cowlwA9QFFjk/EKXRKW46ufo321hTdDwMXzLUd/vdUDiPY u0B9dAtpg2IYqd6KwiysLeeL3D1sMUmV71wriI9EuSugFF9BiA0nma1Xzpg9r8qkV7 zfxKy4QPohhqoblPBCKMrmTig2Try/1jPAGHP6tg8BANj2YbkYjLdZ8b2dI+HqRwwi 7q5utQtOf5t9YWzAwS90BXcBtO44I7QbJJfoAUTeW++mukQd5oPkUoM3xyMf5FD7rx /2rqOqrO73BQw== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 636EA67BAC for ; Mon, 15 Sep 2025 06:29:48 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939387; bh=pcSMGn6mma2+uf/6kz9xRqvkniOexDH2BReNn3rgje0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TH8ePpONwgS6d/FxWJGakYOByaUczDB/qwZ4a3LpbFC6H2FygQ8o80mEiX71uBaMz /chYLVyd982F/8PaF9NLO3PhrmtLfYaDVohvgiwSoVamPvJ0Gmk9e4z34dhBf9/SHj 67duIcX1fcE2tFFl7xs0hQgvWb7JE4diJSJZyn+ydbM03oZvS38gKkAFG08hJP3+K4 Do6vT0BXSs9sqzZ1aEpc6qxwGJt8Vg9jlqZy5eJpKmWZ0DWLJSUZUA3G8fysmoJw5H ZamEU2EmSJE8atJGtzBKm5UIaSnsBK1Rfxh+AQ8pHzud2NQZDDQCNhqZEX3CfwH5fc LzYTKPYkGSk7w== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 661D267BCA; Mon, 15 Sep 2025 06:29:47 -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 wbBwYaEgsLLW; Mon, 15 Sep 2025 06:29:47 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939384; bh=Ds6XUdl7o0F54dEwOg8cXttAZBZ3xcXrGq3MLqU3ngQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KjnfsDf/chqi2h376u7nSQPfMRdNRLQ415motRlQC9ei8+PwW2WQvDZdNSMp+zrne kQtSaSioM7N5wmgpJfg/T7tK6wl1y99sIiTi1zKJ03V6cWExuLbFJCW78V/PVetq5Q qOP88fMPSDr/UwrsldyYPuuT9CKnWIwCVV6w9pAEFkm7GrHTny5irx5CovmNyvpcd1 KFLv/TAPxnpCawNaVA89G02fq7LZ3LhqbfCooqOvJ9BkRVSVpdnpV297yvBIokY+ug PKI528EJqygZGyy6uhT7Et+rANRQIQjJQgORGUpargd+A2Np+waU98nlZ6EIKtJUD2 SaWJTHy7maApQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 3959167BD0; Mon, 15 Sep 2025 06:29:44 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:40 -0600 Message-ID: <20250915122905.1217249-8-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: BB72RVBJVAZLHJ72QKW74NGIU34ZUZWV X-Message-ID-Hash: BB72RVBJVAZLHJ72QKW74NGIU34ZUZWV 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 07/23] expo: Add comments for enum bootmenu_id_t 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 Document the ranges in this enum, so it is clear what they a used for. Signed-off-by: Simon Glass --- boot/bootflow_internal.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/boot/bootflow_internal.h b/boot/bootflow_internal.h index 4cdb6966a7b..0b17a23bfd7 100644 --- a/boot/bootflow_internal.h +++ b/boot/bootflow_internal.h @@ -9,8 +9,18 @@ #ifndef __BOOTFLOW_INTERNAL_H #define __BOOTFLOW_INTERNAL_H -/* expo IDs for elements of the bootflow menu */ -enum { +/** + * enum boomenu_id_t - expo IDs for elements of the bootflow menu + * + * The ranges below are as follows: + * + * @ITEM: Menu items + * @ITEM_LABEL: Short Media or other label to indicate what it is, e.g. "mmc0" + * @ITEM_DESC: Longer description or pretty name, e.g. "Ubuntu 2024.04 LTS" + * @ITEM_KEY: Keypress to select this item, e.g. "1" + * @ITEM_PREVIEW: Preview image for the OS + */ +enum boomenu_id_t { START, /* strings */ From patchwork Mon Sep 15 12:28:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 323 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=1757939393; bh=g183alaATjKDVCMBQyFDou2+7AyFN+KhiJqXyCqswWg=; 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=UrWTVBUqbWIRte0I8tcti+m4diTbuC+M+r+jaBjC40ErAGZeymvJ6hFyZw7Vah0Le CM4w+c3/ZPu5k9GSI2k7KNKj/gUMcp4tvz7Cn/Z/6vsH5BqFg0YVllQqn1VK3pJa3q 2+EbFFQgAgD6McFxkAT87n1KHVU8HZBiNxFlPy3GxLq6pIe+6UQ7IuPDXrYT5iBgmm gx5ztUS5DKsoxUGUnE3oW7doEKZT6ld9UVliLJvi3sWM5QMvGLcCZ7+nus6MxoQsi0 EqzCdLT4QNZ1LPT49Z5bMtAAIeb7WH+GaXmoMoohiud1c3YhEcNgG8qLvuwFypqvKW GsJY3bF6PKWGg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id CF4AA67BCB for ; Mon, 15 Sep 2025 06:29:53 -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 wCuQWv0LNJv0 for ; Mon, 15 Sep 2025 06:29:53 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939393; bh=g183alaATjKDVCMBQyFDou2+7AyFN+KhiJqXyCqswWg=; 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=UrWTVBUqbWIRte0I8tcti+m4diTbuC+M+r+jaBjC40ErAGZeymvJ6hFyZw7Vah0Le CM4w+c3/ZPu5k9GSI2k7KNKj/gUMcp4tvz7Cn/Z/6vsH5BqFg0YVllQqn1VK3pJa3q 2+EbFFQgAgD6McFxkAT87n1KHVU8HZBiNxFlPy3GxLq6pIe+6UQ7IuPDXrYT5iBgmm gx5ztUS5DKsoxUGUnE3oW7doEKZT6ld9UVliLJvi3sWM5QMvGLcCZ7+nus6MxoQsi0 EqzCdLT4QNZ1LPT49Z5bMtAAIeb7WH+GaXmoMoohiud1c3YhEcNgG8qLvuwFypqvKW GsJY3bF6PKWGg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id BE15967B34 for ; Mon, 15 Sep 2025 06:29:53 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939392; bh=nTTlk1VtTafkxp8iEXK2L7zXYcHIMbh+qBQryo0Qy6Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=igG4eHoSJh1ZjsW6TZhtMaqgZUhWXZIXVHfHbCrtD7H8tfdfVbSUT2iLFI6TcT3C8 pTUV/9fiZICUuT88SQP4ObmM6EzPvGAvNbXaW1F2txE6TveizI8Y3oOpxw9OAIwGGg o3mdm2iSYZXLLObnoM97Zu0lcPN7ulblJLcHANL1Shhx5o0f6ihr7S8+XKZlIrFG2O KEGfJSmDYZ5NBAymEyO9t83474qxSD9oWuc3E1oCuG61MYrvxvFjOa0iG8GzTcQxAz ngw6wY2A6Zrr6WLqJThoAf53Kykp+oHmcZZaytSzrw06TBBncBNRPPchdA0D7qyfCu II9LHtBuF3cgQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id F3F3A67A04; Mon, 15 Sep 2025 06:29:51 -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 tDh7hOAqJSfx; Mon, 15 Sep 2025 06:29:51 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939386; bh=LooLBxuF4iRK5Z3Pb4qtg6Y5DNVoo25dPwjfupzFm8Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YEMIKSTjiOffg2dQm0LpEVL8dpREkK/rIki99/fLQiuZCblxtMbNjRm2YCf0AZTS/ GWdyOGUaASwGD7rvbekohmOFNvtytSnDxmepjhCeXDw2h3E48wwbSUvftWAo7DypMo AlEzMH/8/BpAHFrk7ZJSJIjUdEdGJn4kRM+k1Cf/m2beLFGhNrzx/7lA2huKRWJg3f aYhozz2V2+3iew2K9GftdbpvABJ2/P+qmboxU6/p4YROYcLJHhKJLRHNG+iIh6IjAk pF77yq+rQiFkBkpmMNVrL583otLLtSQjWG5YFlyEwmjpx+7ghsJxE7MdwjRYJBlutj 2csnlOBdws1cQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 4324F67B45; Mon, 15 Sep 2025 06:29:46 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:41 -0600 Message-ID: <20250915122905.1217249-9-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: AZEXY24FCFF5DNDLYPGHO2QASKCIYF4K X-Message-ID-Hash: AZEXY24FCFF5DNDLYPGHO2QASKCIYF4K 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 08/23] expo: Provide a way to enable the mouse 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 In some cases it is useful to use expo with a mouse (or touchpad). Add a way to tell expo to find and record a mouse device. Signed-off-by: Simon Glass --- boot/expo.c | 19 +++++++++++++++++++ include/expo.h | 13 +++++++++++++ test/boot/expo.c | 22 ++++++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/boot/expo.c b/boot/expo.c index 6f05c47aba6..e18f149a22f 100644 --- a/boot/expo.c +++ b/boot/expo.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -163,6 +164,24 @@ void expo_set_text_mode(struct expo *exp, bool text_mode) exp->text_mode = text_mode; } +int expo_set_mouse_enable(struct expo *exp, bool enable) +{ + int ret; + + if (!enable) { + exp->mouse_enabled = false; + return 0; + } + + ret = uclass_first_device_err(UCLASS_MOUSE, &exp->mouse); + if (ret) + return log_msg_ret("sme", ret); + + exp->mouse_enabled = true; + + return 0; +} + struct scene *expo_lookup_scene_id(struct expo *exp, uint scene_id) { struct scene *scn; diff --git a/include/expo.h b/include/expo.h index c025e5494a1..f49a6fc5dce 100644 --- a/include/expo.h +++ b/include/expo.h @@ -109,6 +109,7 @@ struct expo_theme { * @name: Name of the expo (allocated) * @display: Display to use (`UCLASS_VIDEO`), or NULL to use text mode * @cons: Console to use (`UCLASS_VIDEO_CONSOLE`), or NULL to use text mode + * @mouse: Mouse to use (`UCLASS_MOUSE`), or NULL if no mouse * @scene_id: Current scene ID (0 if none) * @next_id: Next ID number to use, for automatic allocation * @action: Action selected by user. At present only one is supported, with the @@ -118,6 +119,7 @@ struct expo_theme { * @text_mode: true to use text mode for the menu (no vidconsole) * @popup: true to use popup menus, instead of showing all items * @show_highlight: show a highlight bar on the selected menu item + * @mouse_enabled: true if the mouse is enabled * @priv: Private data for the controller * @done: Indicates that a cedit session is complete and the user has quit * @save: Indicates that cedit data should be saved, rather than discarded @@ -130,6 +132,7 @@ struct expo { char *name; struct udevice *display; struct udevice *cons; + struct udevice *mouse; uint scene_id; uint next_id; struct expo_action action; @@ -138,6 +141,7 @@ struct expo { bool text_mode; bool popup; bool show_highlight; + bool mouse_enabled; void *priv; bool done; bool save; @@ -667,6 +671,15 @@ int expo_arrange(struct expo *exp); */ void expo_set_text_mode(struct expo *exp, bool text_mode); +/** + * expo_set_mouse_enable() - Controls whether the expo enables mouse input + * + * @exp: Expo to update + * @enable: true to enable mouse input, false to disable + * Returns: 0 if OK, or -ve error if no mouse found + */ +int expo_set_mouse_enable(struct expo *exp, bool enable); + /** * scene_new() - create a new scene in a expo * diff --git a/test/boot/expo.c b/test/boot/expo.c index 634bab8f203..9ee2c312f86 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -928,3 +928,25 @@ static int expo_test_build(struct unit_test_state *uts) return 0; } BOOTSTD_TEST(expo_test_build, UTF_DM); + +/* test expo_set_mouse_enable() */ +static int expo_mouse_enable(struct unit_test_state *uts) +{ + struct udevice *dev; + struct expo *exp; + + ut_assertok(uclass_first_device_err(UCLASS_VIDEO, &dev)); + ut_assertok(expo_new(EXPO_NAME, NULL, &exp)); + ut_assertok(expo_set_display(exp, dev)); + + ut_asserteq(false, exp->mouse_enabled); + + ut_assertok(expo_set_mouse_enable(exp, true)); + ut_assertnonnull(exp->mouse); + ut_asserteq(UCLASS_MOUSE, device_get_uclass_id(exp->mouse)); + + expo_destroy(exp); + + return 0; +} +BOOTSTD_TEST(expo_mouse_enable, UTF_DM | UTF_SCAN_FDT); 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); From patchwork Mon Sep 15 12:28: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: 325 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=1757939399; bh=dH5xgHAtW/TPe2AQRrLqT3VQ5JZe/SdrCevIcTKxDEQ=; 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=s18fR0qGtw7wscZ7dwOFdgyMLHsHklYQBtZEG4Ud7Hxva0ItzaLhsXoCoklsTR1/Y N2BWShLMmwDEDnaOX2DBaqqGsjYh/zELTSI0mx07rTct2bN5xNh9tdexD+rxUVKKNm KwF9BYW9r5jss56pLiV3gMC7CYZMwKYqa0Rdo8699m/M31oNvmhI+6R9pA7oHOlzFB nhERk/uVdrq53Cf/UfFoyxTjAX4WzjvYHcCUak1wWZ1bdkEgWtYSGUfMp9rr63M81c UM4LEw79ydTbV5ouh4fXtBbOVvpodHiwWZ9Py5TRq68zTgw8TdYRKH8hhh4Ljf86RK EqDdK6m1FDFmA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A766767BCC for ; Mon, 15 Sep 2025 06:29:59 -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 f0mqDcbF0BOY for ; Mon, 15 Sep 2025 06:29:59 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939399; bh=dH5xgHAtW/TPe2AQRrLqT3VQ5JZe/SdrCevIcTKxDEQ=; 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=s18fR0qGtw7wscZ7dwOFdgyMLHsHklYQBtZEG4Ud7Hxva0ItzaLhsXoCoklsTR1/Y N2BWShLMmwDEDnaOX2DBaqqGsjYh/zELTSI0mx07rTct2bN5xNh9tdexD+rxUVKKNm KwF9BYW9r5jss56pLiV3gMC7CYZMwKYqa0Rdo8699m/M31oNvmhI+6R9pA7oHOlzFB nhERk/uVdrq53Cf/UfFoyxTjAX4WzjvYHcCUak1wWZ1bdkEgWtYSGUfMp9rr63M81c UM4LEw79ydTbV5ouh4fXtBbOVvpodHiwWZ9Py5TRq68zTgw8TdYRKH8hhh4Ljf86RK EqDdK6m1FDFmA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 9682C67BAC for ; Mon, 15 Sep 2025 06:29:59 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939398; bh=ftnKgXK9l6YS07G+q2Ifq7uQapjZkKixFYd0lOuqtT8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EqRvA+VsTFtZHlAL0f+kHFFXFXYPch1A0vikw9zfQwXGyejJzTJaOf26mVr1j3Gzj eF93QFJi2n2BQ7SpNtPXG9+W/jmwa8RlxM3bIKhLxL6bbOpB6ia//e/oukJGT07yYu aVDzR6p3+126ZKLPQnMcYL140g0gSPei0CpmOpvhFpXg0EVHFS7RMgo/kFTbjpNEzG jEcJK2Gszj/prAcjklIT85euMjBQpZm+hXOykErFsQ3vFTDh9nMKWC6mO1AS+0eKlf yrvAOK2a+JkHX5G2rJFuCe9gsXfRf4bljMzlOjM9O/TDJHysBGZFv0GQXxVOXWSj43 0RSOmJ7YFhGjA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 7922C67BC8; Mon, 15 Sep 2025 06:29:58 -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 n475Zl5_j8vY; Mon, 15 Sep 2025 06:29:58 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939393; bh=J3YX4RK2ixZsuN9MRdeWY5s+iQvCzCA7KajBq+b0q2w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JFbFjHkHcafzlMLIOOkdox0chrG1ymtK1vPzZ0m6lZA7z75/6fUJJc1juex0ni2Tj dmi5P6ZQjFOl81W/EWYfBLRgPsM96UPL8/zDHjqrAfM0YALqtdiXz/Dz6Z3kVGlcEW W7jQLDjw9WlAXEJdko5sSiVY0PDxQ9Wr0def8W6gapOh/PTK8RbAWM7VQ094MHMiFe O/TLo50C5E1+8uYhHLv62fsX76ia3LwP5U4kXiD/nw+GMNJnewbUmBW+cUbty3UUil JTtuvpCbv4LPo2E4LsnS5eDQQJN26kId7TSFDTkI7voZkKPjsX9bPchguUPLcOSJLU ijTXmwgTGvJxA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id E7F6767BAC; Mon, 15 Sep 2025 06:29:52 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:43 -0600 Message-ID: <20250915122905.1217249-11-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: 6VQMZT4KBDWVO6QG32ZFGA7A4RZPBSPI X-Message-ID-Hash: 6VQMZT4KBDWVO6QG32ZFGA7A4RZPBSPI 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 10/23] expo: test: Move expo creation into a separate function 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 In preparation for adding more tests which use a common expo, move the creation code out of expo_render_image() and into a new function. Signed-off-by: Simon Glass --- test/boot/expo.c | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/test/boot/expo.c b/test/boot/expo.c index 0c7230aee7c..d407ad839f6 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -465,15 +465,25 @@ static int expo_object_menu(struct unit_test_state *uts) } BOOTSTD_TEST(expo_object_menu, UTF_DM | UTF_SCAN_FDT); -/* Check rendering a scene */ -static int expo_render_image(struct unit_test_state *uts) +/** + * create_test_expo() - Create a test expo with menu items for testing + * + * @uts: Unit test state + * @expp: Returns pointer to expo + * @scnp: Returns pointer to scene + * @menup: Returns pointer to menu + * @bufp: Returns pointer to buf (caller must uninit) + * @logo_copyp: Returns pointer to logo_copy (caller must uninit) + * Returns: 0 if OK, -ve on error + */ +static int create_test_expo(struct unit_test_state *uts, struct expo **expp, + struct scene **scnp, struct scene_obj_menu **menup, + struct abuf *bufp, struct abuf *logo_copyp) { struct scene_obj_menu *menu; struct abuf buf, logo_copy; - struct scene *scn, *scn2; + struct scene *scn; struct abuf orig, *text; - struct expo_action act; - struct scene_obj *obj; struct udevice *dev; struct expo *exp; int id, size; @@ -586,6 +596,29 @@ static int expo_render_image(struct unit_test_state *uts) abuf_printf(text, "This\nis the initial contents of the text editor " "but it is quite likely that more will be added later"); + *expp = exp; + *scnp = scn; + *menup = menu; + *bufp = buf; + *logo_copyp = logo_copy; + + return 0; +} + +/* Check rendering a scene */ +static int expo_render_image(struct unit_test_state *uts) +{ + struct scene_obj_menu *menu; + struct abuf buf, logo_copy; + struct scene *scn, *scn2; + struct expo_action act; + struct scene_obj *obj; + struct udevice *dev; + struct expo *exp; + + ut_assertok(create_test_expo(uts, &exp, &scn, &menu, &buf, &logo_copy)); + dev = exp->display; + scn2 = expo_lookup_scene_id(exp, SCENE1); ut_asserteq_ptr(scn, scn2); scn2 = expo_lookup_scene_id(exp, SCENE2); From patchwork Mon Sep 15 12:28:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 326 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=1757939402; bh=aUlhYq1GkdhBtArbr4gnD+uyWxCnUetlFpkGooU1e+U=; 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=KqReUBiEHVA0eZ2LIc0Op7uMFa6UqzM0533nJr3/hBnRDwldKWQR/C2fasYn+3efD dJSqxsVZV6hcBNeqAIQN9w2n3zVm6W5zwytlROf+ATcFOm5SUzI4k/WAEwjZHO5Xx1 JTFHYWkpuD7NnOnSWQcWx99a1nMj31A1eQ3x9aM5XXsmC5PrqevP5vOmWIXjaA8ql1 TGQUayOpZdwjgQLa2dC9HuXLUo+LZvHhwKLyyqK8QHC6pByzy9AX/igO+lSU8y5/Du jjr7YDT3vSX+dpCSBdHDoH7Hy3b8c/dmMVMrfjfBsRIG8zaNa0vIoGcr7R/O3V/KIn IEovsqQ2Wb/AA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 10C1367BD5 for ; Mon, 15 Sep 2025 06:30:02 -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 9vkeXqlxKwoX for ; Mon, 15 Sep 2025 06:30:01 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939401; bh=aUlhYq1GkdhBtArbr4gnD+uyWxCnUetlFpkGooU1e+U=; 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=LUtlxNCvUw5k9EYcuNUKGLOGrmsxzmn2bm5qP3alcTJ9JUVXuGmEKnIdxtRs4uzHq On58o0N9I3ycUATiSvBx9YysKhdXL6FDNJyqmYPJGbPZVnxhY1TX099dQ6csW+qGIv hFRIfafAB33pchW3JRx8dDcnF9aFMQ2XycWxRSowrPwYf2OWvsmCnnfM0NfQazRDOQ 1k/LHnoAshlLc8S+yphvgALgW6NwVUgdbRJrhMnrWPjyXbnyPdGNy/NOipCaHvzx1x bJaYELuDoxd7m8XK7MtqUHGOI82nh8r6xgkybM1ykRvXsdGf/F8QH+PQcHptMdob06 gKYW221bb84gQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 01AC667B44 for ; Mon, 15 Sep 2025 06:30:01 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939399; bh=cIZCTDr3YMJeeQjKlZFou4/zogsxgOGO5h+mlnjxr70=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tCicUPGOB2byX2QdxP5LchPZY+YcITxAi2/v62A+SPvakgyHt0w6BxvtiCQF2BLk/ RVFKMXqW8+IYMFYHVqwy9g2z5zXHZy2P2yxxcGVLYVplev310+NNLgXayCJTp3Lr4V eovSycF1EC8LgfZMiPjBKw9eGSd7F4i5ZYD3A2pbfbbn3nwBfeFNyXYv00ZVHXcgJU t87Wj0l9RkoBbNzmIiAos5mOxm4Uf+aSVP5Mlp67BfJ1RxHharBR2m3+IuDI/mPGsN hi1M5vMDkoVVd0IEhZVSUK73Oh066OAwS222Nvbomf4EvckpEoROgNOeTK3juzCzok S7MQt4uZBcPxg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 5FB4B67B44; Mon, 15 Sep 2025 06:29:59 -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 ZilBeRfylSjN; Mon, 15 Sep 2025 06:29:59 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939397; bh=jhLAABVJH3hBvJhNTbw3DVDVy8gylzM+qMGXarmUn8M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=omST5VHKYZCI50/zbart4+sRFKtsITA2bjA+475IlVm2hQrV/7PF9vW6p8kaeWB+Z 85V2jH64Yr49h/JVA4c3h3uOt2r8QYBfiIYpP4KqJaJNVd7Yj31aCiyEo6wzBo49l7 BBXwsy9eCktLaialYrxo8iRSjglVmDUCTH2xFDastbOoNzV6nqbx9V2UxecsKtfY7y 4jQPl7nu1YUnJgaogqkxDd7io14uNVLt1XEVsRbIn7oa1BUVI5aMQym4Rx4OlZKcrP 6o38uoO41VSwHUGApcmYfycChDO97OJb0y1V2nPsfv/3Fjg+CdnRi8kpkfPkdQy2xF 7kzniZaijjYxA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 8162267B3C; Mon, 15 Sep 2025 06:29:57 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:44 -0600 Message-ID: <20250915122905.1217249-12-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: D2DM7IKCTEC3OCOFSBXOR5QJIUFIKK5Y X-Message-ID-Hash: D2DM7IKCTEC3OCOFSBXOR5QJIUFIKK5Y 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/23] expo: Provide a way to check if a position is within a 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 To implement mouse clicks we need a way to figure out what the user has clicked on. As a starting point, create a scene_menu_within() function which returns the item containing an x, y coordinate. Provide a helper function in scene.c for use with this. Add a simple for completeness. Co-developed-by: Claude Signed-off-by: Simon Glass --- boot/scene.c | 17 +++++++++++++++ boot/scene_internal.h | 24 +++++++++++++++++++++ boot/scene_menu.c | 31 +++++++++++++++++++++++++++ test/boot/expo.c | 49 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+) diff --git a/boot/scene.c b/boot/scene.c index 50a7dfb22a1..98716ef2337 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -1028,6 +1028,23 @@ int scene_send_key(struct scene *scn, int key, struct expo_action *event) return 0; } +bool scene_within(const struct scene *scn, uint id, int x, int y) +{ + struct scene_obj *obj; + + obj = scene_obj_find(scn, id, SCENEOBJT_NONE); + if (!obj) { + log_debug("Cannot find id %d\n", id); + return false; + } + log_debug("- id %d: '%s' bbox x0 %d y0 %d x1 %d y1 %d\n", id, obj->name, + obj->bbox.x0, obj->bbox.y0, obj->bbox.x1, obj->bbox.x1); + + /* Check if point (x, y) is within object's bounding box */ + return (x >= obj->bbox.x0 && x <= obj->bbox.x1 && + y >= obj->bbox.y0 && y <= obj->bbox.y1); +} + int scene_obj_calc_bbox(struct scene_obj *obj, struct vidconsole_bbox bbox[]) { switch (obj->type) { diff --git a/boot/scene_internal.h b/boot/scene_internal.h index c6f2615a2c5..15a96b1e31e 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -241,6 +241,30 @@ int scene_render(struct scene *scn); */ int scene_send_key(struct scene *scn, int key, struct expo_action *event); +/** + * scene_within() - check if a point is considered within an object ID + * + * @scn: Scene to check + * @id: ID of object to check + * @x: X coordinate of the point + * @y: Y coordinate of the point + * Return: true if the point is considered within the object, false if not + */ +bool scene_within(const struct scene *scn, uint id, int x, int y); + +/** + * scene_menu_within() - check if a point is considered within a menu + * + * @scn: Scene to check + * @menu: Menu to check + * @x: X coordinate of the point + * @y: Y coordinate of the point + * Return: item the point is within, or NULL if none + */ +struct scene_menitem *scene_menu_within(const struct scene *scn, + struct scene_obj_menu *menu, + int x, int y); + /** * scene_render_deps() - Render an object and its dependencies * diff --git a/boot/scene_menu.c b/boot/scene_menu.c index 0ed73cd12cc..758343fe909 100644 --- a/boot/scene_menu.c +++ b/boot/scene_menu.c @@ -497,6 +497,37 @@ int scene_menu_send_key(struct scene *scn, struct scene_obj_menu *menu, int key, return 0; } +struct scene_menitem *scene_menu_within(const struct scene *scn, + struct scene_obj_menu *menu, + int x, int y) +{ + struct scene_menitem *item; + + list_for_each_entry(item, &menu->item_head, sibling) { + log_debug(" item %d: label %d\n", item->id, item->label_id); + bool within; + + within = scene_within(scn, item->label_id, x, y); + log_debug("- item %d within %d\n", item->id, within); + if (!within && !scn->expo->popup) { + log_debug("- non-popup within key %d desc %d preview %d\n", + scene_within(scn, item->key_id, x, y), + scene_within(scn, item->desc_id, x, y), + scene_within(scn, item->preview_id, x, y)); + within |= scene_within(scn, item->key_id, x, y) || + scene_within(scn, item->desc_id, x, y) || + scene_within(scn, item->preview_id, x, y); + log_debug("- popup within %d\n", within); + } + + log_debug("- final within %d\n", within); + if (within) + return item; + } + + return NULL; +} + int scene_menuitem(struct scene *scn, uint menu_id, const char *name, uint id, uint key_id, uint label_id, uint desc_id, uint preview_id, uint flags, struct scene_menitem **itemp) diff --git a/test/boot/expo.c b/test/boot/expo.c index d407ad839f6..99c28cc77f6 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -962,6 +962,55 @@ static int expo_test_build(struct unit_test_state *uts) } BOOTSTD_TEST(expo_test_build, UTF_DM); +/* test scene_menu_within() function */ +static int expo_menu_within(struct unit_test_state *uts) +{ + struct scene_obj_menu *menu; + struct scene_menitem *item; + struct scene_obj *obj; + struct udevice *dev; + struct scene *scn; + struct expo *exp; + ofnode node; + + node = ofnode_path("/cedit"); + ut_assert(ofnode_valid(node)); + ut_assertok(expo_build(node, &exp)); + + scn = expo_lookup_scene_id(exp, ID_SCENE1); + ut_assertnonnull(scn); + + menu = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_NONE); + ut_assertnonnull(menu); + + ut_assertok(uclass_first_device_err(UCLASS_VIDEO, &dev)); + ut_assertok(expo_set_display(exp, dev)); + + ut_assertok(scene_arrange(scn)); + + /* get first menu item and test with its coordinates */ + item = list_first_entry(&menu->item_head, struct scene_menitem, + sibling); + ut_assertnonnull(item); + + /* get the label object to find coordinates */ + obj = scene_obj_find(scn, item->label_id, SCENEOBJT_NONE); + ut_assertnonnull(obj); + ut_asserteq_ptr(item, scene_menu_within(scn, menu, obj->bbox.x0 + 1, + obj->bbox.y0 + 1)); + + /* test point outside menu bounds */ + ut_assertnull(scene_menu_within(scn, menu, -1, -1)); + + /* test point far outside menu bounds */ + ut_assertnull(scene_menu_within(scn, menu, 9999, 9999)); + + expo_destroy(exp); + + return 0; +} +BOOTSTD_TEST(expo_menu_within, UTF_DM | UTF_SCAN_FDT); + /* test expo_set_mouse_enable() */ static int expo_mouse_enable(struct unit_test_state *uts) { From patchwork Mon Sep 15 12:28:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 327 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=1757939406; bh=jUR48FDjVhj1k4gAOOAWZcUYINVy7OWxtwPVVE3Q03U=; 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=wicdgQC+JB3FF67afiyQuWBVl6xTsvLZLpHu0dbMRgSCwwCYOyLLoK0K2qra5ctaD TreUgRVeXDWOBKN0t0yuLDvRL40+wi+vrfXOKmib1KE7ZFSB+0PXSGQfL/sOYUzIU6 izXR0AKlh0mXjauY1WG+tJV7BDq5R6qBqV0sVoLWtQX26BoBdHfklFWtZdquXIpk5Y 5/Gt5jXlIyCripP+WGl6Lc3a6jC2HEXu85Z4ElFDD97h7n4Jt8S//ld1mmcILYpCPx 7eu1OClxlrUlUW35Oj5qjvPAoJhqzP5dIu5TSkAQrAlLDEGdHQBK3YT+AR6Noi3vlj nuqIOGxrRfyDg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 8A4F467BC8 for ; Mon, 15 Sep 2025 06:30:06 -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 NYsxJ0thmuIk for ; Mon, 15 Sep 2025 06:30:06 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939406; bh=jUR48FDjVhj1k4gAOOAWZcUYINVy7OWxtwPVVE3Q03U=; 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=wicdgQC+JB3FF67afiyQuWBVl6xTsvLZLpHu0dbMRgSCwwCYOyLLoK0K2qra5ctaD TreUgRVeXDWOBKN0t0yuLDvRL40+wi+vrfXOKmib1KE7ZFSB+0PXSGQfL/sOYUzIU6 izXR0AKlh0mXjauY1WG+tJV7BDq5R6qBqV0sVoLWtQX26BoBdHfklFWtZdquXIpk5Y 5/Gt5jXlIyCripP+WGl6Lc3a6jC2HEXu85Z4ElFDD97h7n4Jt8S//ld1mmcILYpCPx 7eu1OClxlrUlUW35Oj5qjvPAoJhqzP5dIu5TSkAQrAlLDEGdHQBK3YT+AR6Noi3vlj nuqIOGxrRfyDg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 722E867BCA for ; Mon, 15 Sep 2025 06:30:06 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939404; bh=DP5lM3oPZ/YX6ejxg+hGIVGQ8EOkx5GCGmYU5qTCyIY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PXhNGE4uHTG/03vhiFaiizLU8wDBVQKCtgU9/RKJB3s5I6flGWfZNoTM8LGTjiuhz 7acG7FNxDwatAFWiEW0Q7/7Tmmj2NDgb69nmET/ZGfmiSp9GdR5TxrJ+R8hlBs4wt4 U+KEaJ5CxmV+8afMMkOTAUqfaEabbtqahbMCT+eg2oFeKidIagWx5xeVXQpE7Frg4W mKX41wVb7HgypBbPirRhf8TWPB0OqbYJHBsWbYzHvpN56VMXsia3OcN2GFxlr4RoOU xFFoHYoMFjQcGuuFRGn3VOFfnY7v0WpgohvwICo24aDp9oaWhz4p8K/KRfQaxTbeHH WPxyUO00rikbw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 82C5267B44; Mon, 15 Sep 2025 06:30:04 -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 yb_CXqg9qjQM; Mon, 15 Sep 2025 06:30:04 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939399; bh=epHrxTN3HES7P05c0H25J8LX0lS31DnyF519Yn+Ru/w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bYnb4fFZ4zfVWNFmeImAxC4wV+iL3qTnX0QlZAMf4YACewAmjvWfIaDW5ELemF6Yf JXJ41UZ+VkgVwsOyi3ge88yYgg6OWE/k8syEm7UX3TEOtLp0siL49PMnY33pBMYHf/ 5oCBta5TveqMDpzauBaSoTonrRIOV5PwCS62QrKNHL34KOKNkDOgbZx8ATLiIa6wq+ EoDXtnQBHEl0gMXG/M+q7FuvfCMbIOK1yno5wb8EaVhWdDdkijy834UAOu8Iw5vHFo h1qMsVPHdsZle8NWwPPTPJpdnHzY1+MA2RA3QUqqRsxzivMw3Wkbhfw6pDL/+iXEnN 1n597Td+WFOTA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id A518D67BCB; Mon, 15 Sep 2025 06:29:59 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:45 -0600 Message-ID: <20250915122905.1217249-13-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: 2DMIEUKJO74LF5A4YMZ7ZHMNS6ADEV2S X-Message-ID-Hash: 2DMIEUKJO74LF5A4YMZ7ZHMNS6ADEV2S 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 12/23] expo: Allow checking if a position is within a textline 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 For a textline it is possible to click into the edit field. Provide a function to check whether a position is within this field. Signed-off-by: Simon Glass --- boot/scene.c | 33 +++++++++++++++++++++++++++++++++ boot/scene_internal.h | 12 ++++++++++++ boot/scene_textline.c | 6 ++++++ test/boot/expo.c | 24 +++++++++++++++++++++--- 4 files changed, 72 insertions(+), 3 deletions(-) diff --git a/boot/scene.c b/boot/scene.c index 98716ef2337..e25596366cc 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -1045,6 +1045,39 @@ bool scene_within(const struct scene *scn, uint id, int x, int y) y >= obj->bbox.y0 && y <= obj->bbox.y1); } +bool scene_obj_within(const struct scene *scn, struct scene_obj *obj, int x, + int y) +{ + bool within = false; + + switch (obj->type) { + case SCENEOBJT_NONE: + case SCENEOBJT_IMAGE: + case SCENEOBJT_TEXT: + case SCENEOBJT_BOX: + break; + case SCENEOBJT_MENU: { + struct scene_obj_menu *menu; + + menu = (struct scene_obj_menu *)obj, + within = scene_menu_within(scn, menu, x, y); + break; + } + case SCENEOBJT_TEXTLINE: { + struct scene_obj_textline *tline; + + tline = (struct scene_obj_textline *)obj, + within = scene_textline_within(scn, tline, x, y); + break; + } + case SCENEOBJT_TEXTEDIT: + /* TODO(sjg@chromium.org): Implement this */ + break; + } + + return within; +} + int scene_obj_calc_bbox(struct scene_obj *obj, struct vidconsole_bbox bbox[]) { switch (obj->type) { diff --git a/boot/scene_internal.h b/boot/scene_internal.h index 15a96b1e31e..03bc925edfe 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -265,6 +265,18 @@ struct scene_menitem *scene_menu_within(const struct scene *scn, struct scene_obj_menu *menu, int x, int y); +/** + * scene_textline_within() - check if a point is considered within a textline + * + * @scn: Scene to check + * @tline: Txtline to check + * @x: X coordinate of the point + * @y: Y coordinate of the point + * Return: true if the point is considered within the object, false if not + */ +bool scene_textline_within(const struct scene *scn, + struct scene_obj_textline *tline, int x, int y); + /** * scene_render_deps() - Render an object and its dependencies * diff --git a/boot/scene_textline.c b/boot/scene_textline.c index 4a77cc652a8..b595d3477e4 100644 --- a/boot/scene_textline.c +++ b/boot/scene_textline.c @@ -175,6 +175,12 @@ int scene_textline_send_key(struct scene *scn, struct scene_obj_textline *tline, return 0; } +bool scene_textline_within(const struct scene *scn, + struct scene_obj_textline *tline, int x, int y) +{ + return scene_within(scn, tline->edit_id, x, y); +} + int scene_textline_render_deps(struct scene *scn, struct scene_obj_textline *tline) { diff --git a/test/boot/expo.c b/test/boot/expo.c index 99c28cc77f6..e8674d359d7 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -962,9 +962,10 @@ static int expo_test_build(struct unit_test_state *uts) } BOOTSTD_TEST(expo_test_build, UTF_DM); -/* test scene_menu_within() function */ -static int expo_menu_within(struct unit_test_state *uts) +/* test scene object within functions */ +static int expo_within_funcs(struct unit_test_state *uts) { + struct scene_obj_textline *tline; struct scene_obj_menu *menu; struct scene_menitem *item; struct scene_obj *obj; @@ -980,6 +981,7 @@ static int expo_menu_within(struct unit_test_state *uts) scn = expo_lookup_scene_id(exp, ID_SCENE1); ut_assertnonnull(scn); + /* test scene_menu_within() */ menu = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_NONE); ut_assertnonnull(menu); @@ -1005,11 +1007,27 @@ static int expo_menu_within(struct unit_test_state *uts) /* test point far outside menu bounds */ ut_assertnull(scene_menu_within(scn, menu, 9999, 9999)); + /* test scene_textline_within() */ + tline = scene_obj_find(scn, ID_MACHINE_NAME, SCENEOBJT_NONE); + ut_assertnonnull(tline); + obj = scene_obj_find(scn, tline->edit_id, SCENEOBJT_NONE); + ut_assertnonnull(obj); + + /* positive test: point within textline bounds */ + ut_assert(scene_textline_within(scn, tline, obj->bbox.x0 + 1, + obj->bbox.y0 + 1)); + + /* test point outside textline bounds */ + ut_assert(!scene_textline_within(scn, tline, -1, -1)); + + /* test point far outside textline bounds */ + ut_assert(!scene_textline_within(scn, tline, 9999, 9999)); + expo_destroy(exp); return 0; } -BOOTSTD_TEST(expo_menu_within, UTF_DM | UTF_SCAN_FDT); +BOOTSTD_TEST(expo_within_funcs, UTF_DM | UTF_SCAN_FDT); /* test expo_set_mouse_enable() */ static int expo_mouse_enable(struct unit_test_state *uts) From patchwork Mon Sep 15 12:28:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 328 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=1757939408; bh=MJBcukqQTnA9txhJDvmKupgWFBJxBWHXEdDwcFR6M/8=; 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=SC1H1MQ5XXfqE7oi8WGKrTeVcqsT9BBjjjQOQpbgI+EM8NR91Z67SO8tpbz/PK7rO mHlw6Nc5CcmidzK4Ujx6dGtM+WuHhuCcqp5OQ0/Kn5C9uaJn2gp0BV27SH3mmckFBm CAIyDY18Hb+OVaqY6O9gbiiAGfidqZMY5W7w/kz1TEwANO+jZV6rMmmV4RTCoNL8/n WIhEPLz1ChRNnKcPt7JohPZFnSyO2Rl3ud5bB9+KQEiHjIAlmCKPlkm+a8F1dM2Yah uzSvm+LJCr1hZTZG83Th/MulOgTD/aiN91LpWoFVx5q8MXoCin/cYAwFjD/SEuezCY 6xTvs31WuIh4g== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 0BA5867BCB for ; Mon, 15 Sep 2025 06:30:08 -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 N_wQGFxNI-pU for ; Mon, 15 Sep 2025 06:30:07 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939407; bh=MJBcukqQTnA9txhJDvmKupgWFBJxBWHXEdDwcFR6M/8=; 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=iq9sFS5Kiy9p+l8w9uF1QDNxa1qOWoYoTWD85U8tqufAFLCviex+r8zVh4mQiGniM sPM8P1Lqzctm98ycQal6STqR/AYPIk204/aYGQq5j98uMSMqVqswALxL8S8zpva7u+ 3v8lU1SrvfPk6qYphjIppLgULe5YyXM6uUIlwBIAOzGCqQRyhrtKgNQVmWN5N/f5bl mpU8r4HDujMf5pOVA6dipmej6lED7D6p1E1GQKWTGKp7Q3fKjja9qDc7dBghpub3Do FWbMjFpWjMPz/xx8FI7brS3X6mNZB6SxFBPIuGkO75QWCzmea5WMJUmHS4QF3B85G0 1Q4r75xEqgWzQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id E7BB367BC8 for ; Mon, 15 Sep 2025 06:30:07 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939406; bh=sRqC6vGMQrQ1DA0Gzby67B9wPELkdhOUj5c4g8ogE5o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ExiOaElueALinIg/DufF/4X7eYRU/Ke3oMDsTkQdjqKeyraQQ+WjPdGVJOukiYxzN vP5PfNaSB3Tv0tQ3r3Fxeog9zHdlBgbbp/ROfbegDl7ldoWfNaWmfiVzaaC+pIKOoC prjeE83HebPf/S3p23MkiIf8/I4BXpCVpW8iG6IP1jVmx8mGszzFRlLP8ai2NwaY+p YFbIMRzMrZaE8CdidB22sz5TDyglLsepmkRd7eTJcQ1qNqgINI453za6LQwvLVulo9 YmZ8VZYKkD8Jzi638qcVB0AMSRWZRvQ9aKMvzqzmLe9OpCtnvthqP4obj+K1ZBQHqZ x20p7UzH0jWAw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 0C33467BAC; Mon, 15 Sep 2025 06:30:06 -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 1mLKgun9IL_b; Mon, 15 Sep 2025 06:30:05 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939404; bh=g0FJC9c9YTYMtFB/qOaTzCQY96pbIGAgj/QalfIg53o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E+AHcsBZp4c9C/kIGC3AelRXr/s1SBGld8vwQx3c5hPLa/YuzvEpQmCEMsLt9+wMU qHZ842D3cQP5GeHJADXdES8XlvwEic1PkWmI7SWs9aY8jael9CpusASIn56shmxKva 2o8ajTtcEdsRHwBMVp1kC+UNiSyS0QTIWvxpdN74UEQ6zLOXiLdrMQbNB5q3qcRZDv qNE/Vf8Y2WFENGfAv6dHZOqUR41Or17Ts/RK5z+VXPPLbGRTmGbd29Hv6izyW5ngc2 FXGXhsrDIB/P5Vkig81JO40tbKDmuKNIXfWTHO+DeQUiLv5WLWRmaLtKbaEfJkhefv SI30WYWevDCPA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 4097567B3C; Mon, 15 Sep 2025 06:30:04 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:46 -0600 Message-ID: <20250915122905.1217249-14-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: P3SWJY7AOD47KYN3C2LYIEG76SRIKKVJ X-Message-ID-Hash: P3SWJY7AOD47KYN3C2LYIEG76SRIKKVJ 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 13/23] expo: Tidy up comments for enum expoact_type 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 Some of the comments in this enum and the struct which uses it are out-of-date. Fix this up. Signed-off-by: Simon Glass --- include/expo.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/expo.h b/include/expo.h index f49a6fc5dce..571ba513fa6 100644 --- a/include/expo.h +++ b/include/expo.h @@ -41,8 +41,8 @@ enum expo_id_t { * enum expoact_type - types of actions reported by the expo * * @EXPOACT_NONE: no action - * @EXPOACT_POINT_OBJ: object was highlighted (@id indicates which) - * @EXPOACT_POINT_ITEM: menu item was highlighted (@id indicates which) + * @EXPOACT_POINT_OBJ: object was highlighted (@id indicates which object) + * @EXPOACT_POINT_ITEM: menu item was highlighted (@id indicates which item) * @EXPOACT_SELECT: menu item was selected (@id indicates which) * @EXPOACT_OPEN: menu was opened, so an item can be selected (@id indicates * which menu object) @@ -63,8 +63,8 @@ enum expoact_type { * struct expo_action - an action report by the expo * * @type: Action type (EXPOACT_NONE if there is no action) - * @select: Used for EXPOACT_POINT_ITEM and EXPOACT_SELECT - * @select.id: ID number of the object affected. + * @select: Used for all actions except EXPOACT_NONE and EXPOACT_QUIT + * @select.id: ID number of the object affected * @select.changed: true if the selection has changed since last time (only * valid for EXPOACT_POINT_ITEM) */ From patchwork Mon Sep 15 12:28:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 329 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=1757939413; bh=eVa17nhq1fA3QJxI+Jfu/McrvlVSg+AkTjiOWthqwto=; 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=gbCxB8N6wFhCeEPKlQxLVl2fb0GnRe4jVwqXw9zHG0FOPunDK3g1NOPXdWudqtP/e /hGvqYUGlStHnTeRpCzXZM8+E1DBW+2A+wAgoF1c2Sq7c8d9cJrEZ7l/uvG2Dzbp6S P09ghEZtzcpiF08rcwqL3m2E/WrlAzdBwmAFmjJmcRTFBcEiElCpfXl1spiWiMUaSe Hyrzi3RqmWK8THNPgZqsBoHgejEXKMBwxnQjojM+bBakupQIRWmSkgp8QZcX0Lglxh KVn8JoynRRAlrAQl30qsVFH22Ce8bCMuj/piPQpvmxiix3+YCyJo+3Lu3ul8QAqLGb RSm2kCa8e/ejw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 0392967BD4 for ; Mon, 15 Sep 2025 06:30:13 -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 3sMOj1lcHwfp for ; Mon, 15 Sep 2025 06:30:12 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939412; bh=eVa17nhq1fA3QJxI+Jfu/McrvlVSg+AkTjiOWthqwto=; 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=N4O2atlDJs6ildaOOOGjBKyUECC3EzF3cVpqAoCiX4jnOo9l8q7KyR54ZfNWeamHU NwbSK5yzHFiTQ7+9Ea69X3OkQGmzZAaFba9AaP8RxwTvkYoPkvN7OQJJJmHIx9CmTx 1m1WxfRdEPqDX9S81DaU+r+OezEQW8QzUSu1ki69F487Kw4mRoFVega0BZ+kegsqou qibQqsXmrYQMOXec8j5bZuUfJS0jxfgOrmZFf0lGnIYBRSESPkD328vmk4cYL5rjlh xSw0l+IZ5/YPNdy/mURUm1mooSm0Wi18lFE0l3SkLmISFdZ29X/iWjmTVXnHcrtq+f oLwtNXnX1mcEw== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id E459F67BAC for ; Mon, 15 Sep 2025 06:30:12 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939410; bh=MJ5Ei6EyshjA2J0+7gvk/8NMissgXtWJbOa3xnLlh84=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R36YQ2V5MAgYwuzujkYiQk1nPwKLGTPiqaay7KcRZ8YgWwNrCaZAVG9K0gR3GKYtL +iZ68JE/iVFH1cNi3hdKivXm0QSMjKG58Ii1g1IbjaNlZM2dNpXrhDfrFzUCHq+BWY 4TmjrDPx4ETcU2Yl5+HsuPcJNVM0bPqzDoiN5zZNulCMLw8rKs7VZIUQ6SkbZLOSkL 5zXRv0Z9meh+rGLUPbXHtICFELHJDvnrsOtn70tNIIJgfBXqUNr9Hl6nnN92TaKwHn 6MKXj3hDF4huGKNBwah/FbzwtjyAK8hSl7iMw8nBWi8UDbz9m2WqCeRJLi9b8hArlw 42Ix15XTQWszA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id B7B1467A04; Mon, 15 Sep 2025 06:30:10 -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 hRekZyub6MyI; Mon, 15 Sep 2025 06:30:10 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939406; bh=1pXVGFDNQx5VWKrXfqyMMNFPl8wSZhk7XcIQsGGe6ms=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PCzwWxzZJIity7btYk4oHFnecIcJ4nXjjPEl03NXzrXHidNr+Iy0bTk9WWcrrZ1Pd SbhCLCoWBFuFQK6ZvAOGCrLgY5JMQoW3sec//IWv4/8ASzUPP0GgAqJW5cjki3cxl9 FIdhjpcGuWLrzyhqn2vrLcg6iZ15DX3q8ckgmXXkBFuo5T9bzE9uqd0PiWobPiQfP5 YkXWbvgBsq0UZIUdrUWq+0o7QwnmoKptDyTLCyeXGpIFLmkseu65w8dIF9dgNnsotY AaWHcPJRZYW1sh0MlwRwrRSiSgHxbIp2A1l39pA47TJkDGYkg2uX5A0II9nLk4ZlYy YWFb45huG/2+w== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 5659767B3C; Mon, 15 Sep 2025 06:30:06 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:47 -0600 Message-ID: <20250915122905.1217249-15-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: 3ASNX3QEXU2C4P4FRYFKSGMK4QPWOKIM X-Message-ID-Hash: 3ASNX3QEXU2C4P4FRYFKSGMK4QPWOKIM 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 14/23] expo: Add three new actions for mouse events 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 Popup menus have particular behaviour which needs to be modelled in the expoact_type enum: - clicking on a menu item should select it and close the menu - clicking on a menu should highlight it and open the menu - clicking on a menu while another menu is open should select the item, close the menu, then open the other menu Add actions associated with each of these. These are modelled as combined actions for simplicity. Implement the actions in cedit. The general expo support will come later. Signed-off-by: Simon Glass --- boot/cedit.c | 21 +++++++++++++++++++++ include/expo.h | 11 +++++++++++ 2 files changed, 32 insertions(+) diff --git a/boot/cedit.c b/boot/cedit.c index cc60e757649..ab1a79c1412 100644 --- a/boot/cedit.c +++ b/boot/cedit.c @@ -191,6 +191,27 @@ int cedit_do_action(struct expo *exp, struct scene *scn, scene_set_open(scn, act->select.id, false); cedit_arange(exp, vid_priv, scn->id); break; + case EXPOACT_POINT_OPEN: + scene_set_highlight_id(scn, act->select.id); + scene_set_open(scn, act->select.id, true); + cedit_arange(exp, vid_priv, scn->id); + break; + case EXPOACT_POINT_CLOSE: + /* Point to the item (select it in the menu) */ + ret = scene_menu_select_item(scn, scn->highlight_id, + act->select.id); + if (ret) + return log_msg_ret("pco", ret); + /* Close the menu */ + scene_set_open(scn, scn->highlight_id, false); + cedit_arange(exp, vid_priv, scn->id); + break; + case EXPOACT_REPOINT_OPEN: + scene_set_open(scn, act->select.prev_id, false); + scene_set_highlight_id(scn, act->select.id); + scene_set_open(scn, act->select.id, true); + cedit_arange(exp, vid_priv, scn->id); + break; case EXPOACT_SELECT: scene_set_open(scn, scn->highlight_id, false); cedit_arange(exp, vid_priv, scn->id); diff --git a/include/expo.h b/include/expo.h index 571ba513fa6..a860ba901e4 100644 --- a/include/expo.h +++ b/include/expo.h @@ -47,6 +47,12 @@ enum expo_id_t { * @EXPOACT_OPEN: menu was opened, so an item can be selected (@id indicates * which menu object) * @EXPOACT_CLOSE: menu was closed (@id indicates which menu object) + * @EXPOACT_POINT_OPEN: menu item was pointed to and menu opened (@id indicates + * which menu object) + * @EXPOACT_POINT_CLOSE: menu item was pointed to and menu closed @id indicates + * which menu item) + * @EXPOACT_REPOINT_OPEN: menu closed, another menu opened (@prev_id indicates + * the menu closed, @id indicates menu opened) * @EXPOACT_QUIT: request to exit the menu */ enum expoact_type { @@ -56,6 +62,9 @@ enum expoact_type { EXPOACT_SELECT, EXPOACT_OPEN, EXPOACT_CLOSE, + EXPOACT_POINT_OPEN, + EXPOACT_POINT_CLOSE, + EXPOACT_REPOINT_OPEN, EXPOACT_QUIT, }; @@ -65,6 +74,7 @@ enum expoact_type { * @type: Action type (EXPOACT_NONE if there is no action) * @select: Used for all actions except EXPOACT_NONE and EXPOACT_QUIT * @select.id: ID number of the object affected + * @select.prev_id: ID number of the old object that was highlighted * @select.changed: true if the selection has changed since last time (only * valid for EXPOACT_POINT_ITEM) */ @@ -73,6 +83,7 @@ struct expo_action { union { struct { int id; + int prev_id; bool changed; } select; }; From patchwork Mon Sep 15 12:28:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 330 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=1757939417; bh=1DslM/rg0lPS9PXSgNFYYMVaUIUmo1dphEPh3UQoVRc=; 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=FMnKo8ON4Ra6qqxU6RTGp1g43MlT9F6Y9hy+ZrrnPFp7zVx6K36F7gLmq4ykv9cvX 3lYlCmnuGhZNzIk0/yV1wBMN3qTQfERe7zTzwkTnuA2aFbmEOl5tOgQHJu8+i4GCV9 lZOpjZn6NojaIfHdFeZOHoS0prXb8yZetkTQ/ZQp2WRYJj/nxeP8hffskmqnyqcNH7 NJ6Tv950tG6Rr61V4pHo/qyVjCXOYfPkEB5RqGcELTpzlGiHcNaBuxNuygHGkmkFxn K6nDlqiyyFFc3sZ1NNy/2yTi39tRQpPQ9H6jHmPef+De7qw/rG1UXXXoF8YH9hf7F4 7o85GdIcAfExQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 77D2467BD4 for ; Mon, 15 Sep 2025 06:30:17 -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 LL8vkpCOIMTs for ; Mon, 15 Sep 2025 06:30:17 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939417; bh=1DslM/rg0lPS9PXSgNFYYMVaUIUmo1dphEPh3UQoVRc=; 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=FMnKo8ON4Ra6qqxU6RTGp1g43MlT9F6Y9hy+ZrrnPFp7zVx6K36F7gLmq4ykv9cvX 3lYlCmnuGhZNzIk0/yV1wBMN3qTQfERe7zTzwkTnuA2aFbmEOl5tOgQHJu8+i4GCV9 lZOpjZn6NojaIfHdFeZOHoS0prXb8yZetkTQ/ZQp2WRYJj/nxeP8hffskmqnyqcNH7 NJ6Tv950tG6Rr61V4pHo/qyVjCXOYfPkEB5RqGcELTpzlGiHcNaBuxNuygHGkmkFxn K6nDlqiyyFFc3sZ1NNy/2yTi39tRQpPQ9H6jHmPef+De7qw/rG1UXXXoF8YH9hf7F4 7o85GdIcAfExQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 6349F67BAC for ; Mon, 15 Sep 2025 06:30:17 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939415; bh=1J9p6wZcZm66ppMJZjt+MxcsJ0LHdNePTBGFj/yyclI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QJcnqWib93HMA/Sk4xQqLQZF4/CX//ea3Wua8pTjYegzNA0R42aFCAC51NzxlU4cc 931lT8IFx7KWcruq2GJ6fvc2fkIORE4SyGhCigqhWz6h8zJhrK/D4fTDmBXctuS0g/ GO4tx3SfwqS4YTi4zD2kVem8azSAQ81DOpTo3rpU8Ak3oN/DL3QfvkduaQ6bfWogqV aCrCDvzSWi36u2hJcyGdcSSg9O7ct5wiFxc5RMzrF7zDKFYIJRI8G4trqAusTIdr/n DPRHPgbjy952qdecLgs5J6hCoFS5i1Bdq4wAiuGbS9puOnB2FKZ6ra7O+ovFhZSQG7 moWqZ/Zuf8Uyg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 6132567BAC; Mon, 15 Sep 2025 06:30:15 -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 npgWwoQgoe1r; Mon, 15 Sep 2025 06:30:15 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939411; bh=cWIWx468NMeHB0c9qYqsfZEExLV1X4a6qZaZHmaTUv0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kZN1sIf5GT5WzoIGHaW6uxhOD2PrWwkoG1q4OUihqn4aNEuYYtyuAyDeQ5skvS4cf dyfes7HoOXUD4p7/xh2iGifHO09+r7+NogHddBsGTcS/znAajaYo8JaN83BolnR3g3 wB98gfw0PyZLb3322HTHmdIOVFA/A2L/bHbb8BmZrMEIwxQ0L4dtGmWIOvuES3ppc1 QfA91uLsBSLo6q7UajnISbp5vcfzNiiaeIZbeANUFYCOu9JZrmmiaUUvNs+HWUW+dW Xi3p4aphacH6C7U0rB4fwOlehIVAdQmfohFNcMgUaAFN1371FQj4FLJxhKZC1jmaK9 A8aoJfXebpM4Q== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 10DF567B3C; Mon, 15 Sep 2025 06:30:11 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:48 -0600 Message-ID: <20250915122905.1217249-16-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: 2UKFNRIE4AJ5SLFNHAFZ32TJEM7USGDD X-Message-ID-Hash: 2UKFNRIE4AJ5SLFNHAFZ32TJEM7USGDD 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 15/23] expo: Support sending a click to a 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 Clicking on a menu can result in selecting an item. If it is a popup menu then the item should be closed. Add support for this. Signed-off-by: Simon Glass --- boot/scene_internal.h | 13 +++++++++++++ boot/scene_menu.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/boot/scene_internal.h b/boot/scene_internal.h index 03bc925edfe..91828538417 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -184,6 +184,19 @@ int scene_apply_theme(struct scene *scn, struct expo_theme *theme); int scene_menu_send_key(struct scene *scn, struct scene_obj_menu *menu, int key, struct expo_action *event); +/** + * scene_menu_send_click() - Send a click to a menu for processing + * + * @scn: Scene to use + * @menu: Menu to use + * @x: X coordinate of click + * @y: Y coordinate of click + * @event: Place to put any event which is generated by the click + * Returns: 0 if OK, -ENOTTY if there is no menu item at that position + */ +int scene_menu_send_click(struct scene *scn, struct scene_obj_menu *menu, int x, + int y, struct expo_action *event); + /** * scene_textline_send_key() - Send a key to a textline for processing * diff --git a/boot/scene_menu.c b/boot/scene_menu.c index 758343fe909..d54b99979e1 100644 --- a/boot/scene_menu.c +++ b/boot/scene_menu.c @@ -528,6 +528,36 @@ struct scene_menitem *scene_menu_within(const struct scene *scn, return NULL; } +int scene_menu_send_click(struct scene *scn, struct scene_obj_menu *menu, int x, + int y, struct expo_action *event) +{ + struct scene_menitem *item; + + if (scn->expo->popup) + assert(menu->obj.flags & SCENEOF_OPEN); + + log_debug("menu %d '%s': x %d y %d\n", menu->obj.id, menu->obj.name, + x, y); + + item = scene_menu_within(scn, menu, x, y); + if (!item) { + log_debug("not found\n"); + return -ENOTTY; + } + + if (scn->expo->popup) { + assert(menu->obj.flags & SCENEOF_OPEN); + /* Menu is open - point to item and close menu */ + event->type = EXPOACT_POINT_CLOSE; + log_debug("point-close item %d\n", item->id); + } else { + event->type = EXPOACT_SELECT; + log_debug("select item %d\n", item->id); + } + event->select.id = item->id; + return 0; +} + int scene_menuitem(struct scene *scn, uint menu_id, const char *name, uint id, uint key_id, uint label_id, uint desc_id, uint preview_id, uint flags, struct scene_menitem **itemp) From patchwork Mon Sep 15 12:28:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 331 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=1757939421; bh=JIhBzRi1KMdX4hh3fbkcMBiwExp1cNaHe8fXSBSq3Wk=; 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=NvPpBW0QeUAhaenF5tddtrK9VFwU56wLyxS1GYIBHXnY43Ull9KIvepPI8JUk6Adw MIP36eQRH73Lt36n0mH/rGoVdXIMSt4ynIDpPHlrPSlO5plMhXeJw6CE/Vqmmc9oPX V+tUkvj6z+vygF0tVS9rJdd9Y+LfajpGTzjxYQgFEuj17cTkcCTrEcwrAlPCSRIBK4 mp7XoZszvh0rpTxqbEzoVi5Ewk9+6UXQYLQjaB5MgRRD7HwOrbuuzujse8E7fOjoRI ozhHsp23cxCDvN5olgYtn9ymCthcvAohgA0FjvCZACjFldO27v5c/FceqM+qviODTY L5oUP6YADr5TA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id EE96867BD4 for ; Mon, 15 Sep 2025 06:30:21 -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 H3DcJr80G8Ai for ; Mon, 15 Sep 2025 06:30:21 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939421; bh=JIhBzRi1KMdX4hh3fbkcMBiwExp1cNaHe8fXSBSq3Wk=; 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=NvPpBW0QeUAhaenF5tddtrK9VFwU56wLyxS1GYIBHXnY43Ull9KIvepPI8JUk6Adw MIP36eQRH73Lt36n0mH/rGoVdXIMSt4ynIDpPHlrPSlO5plMhXeJw6CE/Vqmmc9oPX V+tUkvj6z+vygF0tVS9rJdd9Y+LfajpGTzjxYQgFEuj17cTkcCTrEcwrAlPCSRIBK4 mp7XoZszvh0rpTxqbEzoVi5Ewk9+6UXQYLQjaB5MgRRD7HwOrbuuzujse8E7fOjoRI ozhHsp23cxCDvN5olgYtn9ymCthcvAohgA0FjvCZACjFldO27v5c/FceqM+qviODTY L5oUP6YADr5TA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id D9A6267BC8 for ; Mon, 15 Sep 2025 06:30:21 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939419; bh=jyeBrgdy/eRLJQT+FiTY4Oq8448cP0re1/Dl4mmZ56A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QzNf/LRrzt9vdZ/s6ZZEnPmoh0v452ng9kPvatV27fRFLwlZokIZ2DyqCWhjDGx4d 0TvdgtighVKfBxHV51CTeStXibPFer74x8wPGapDDYQaQf7mlUT9tvKY0w11+hrRRR fn6Hr4Do6X13JzhLBdTqysX22HMuh9cGJz9W8EB3a5XTTS5iofN0F+YVqkWyI5ezZW 2pHZVyC40d2ckV/juOPCcXfijH5Pbcim16kJyyogwA2B2CewaPYfYwnM523IsMZ5JX H9mF2mjy8bXhP/pdY3pqmOMpYk2ArwRimGqzRL/eUJrl9uu6vcobuwXi9uz4caMcCx YQlFrD2q3HNgQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 6401467B3C; Mon, 15 Sep 2025 06:30:19 -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 veRsNmHTYLLN; Mon, 15 Sep 2025 06:30:19 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939415; bh=1kxFAItZ44+MybuZnopEDa+Ei+1Qfgi+U34oJc8skDc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BnkI1SZ1HoMf/S9I7Uogg4GzuGTL/+t9cnf9PQd74hJ+dtegzgI7XDj8VvRBrSIup kAUVUBknsbGIM9WdQDbkgnrJpVsLBeNbcfXHJSc98oaR7Qp+VfA6jwG0hW/RPoNCWa qB5+1fkEdq9j1uIaFwpzSN+8On3SNl9uyXOMq0DmPy3orVs8WPK/nCPyDinB40IYod wZahrFbHt9E+e8gn9qMaLQrp633vwioa6YARBYUP6YaFMqbXaTm5oDdvYhEBPIvHCl ZU9CRKkigvzcM0TVSjYlwS0mFRHMbCh7yXzwr8ZApIp9RAh+1iFSGp1dFRFHh3SDeE IuMixyi8xHoHA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 4E28567B34; Mon, 15 Sep 2025 06:30:15 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:49 -0600 Message-ID: <20250915122905.1217249-17-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: LIWPFANSG2ON4PJGJUIZSNJ5VY5Y7S5E X-Message-ID-Hash: LIWPFANSG2ON4PJGJUIZSNJ5VY5Y7S5E 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 16/23] expo: Support sending a click to a scene 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 Implement clicking on an object in the scene. For now only menus and textlines respond to this. For menus the behaviour is different for popups than for normal menus. Signed-off-by: Simon Glass --- boot/scene.c | 173 ++++++++++++++++++++++++++++++++++++++++++ boot/scene_internal.h | 23 ++++++ 2 files changed, 196 insertions(+) diff --git a/boot/scene.c b/boot/scene.c index e25596366cc..d7e0d008b56 100644 --- a/boot/scene.c +++ b/boot/scene.c @@ -1078,6 +1078,179 @@ bool scene_obj_within(const struct scene *scn, struct scene_obj *obj, int x, return within; } +/** + * scene_find_obj_within() - Find an object that is within the coords + * + * @scn: Scene to check + * @x: X coordinates of the click + * @y: Y coordinate of the click + * Return: object that is being clicked on, NULL if none + */ +static struct scene_obj *scene_find_obj_within(const struct scene *scn, int x, + int y) +{ + struct scene_obj *obj; + + log_debug("within: x %d y %d\n", x, y); + list_for_each_entry(obj, &scn->obj_head, sibling) { + log_debug(" - obj %d '%s' can_highlight %d within %d\n", + obj->id, obj->name, scene_obj_can_highlight(obj), + scene_obj_within(scn, obj, x, y)); + if (scene_obj_can_highlight(obj) && + scene_obj_within(scn, obj, x, y)) { + log_debug("- returning obj %d '%s'\n", obj->id, + obj->name); + return obj; + } + } + log_debug("- no object\n"); + + return NULL; +} + +/** + * send_click_obj() - Handle a click for moving between objects + * + * On entry, scn->highlight_id is set to a menu/textline, but the object is not + * open. + * + * @scn: Scene to receive the click + * @obj: Object to receive the click + * @x: X coordinate of the click + * @y: Y coordinate of the click + * @event: Returns resulting event from this keypress + * Returns: 0 if OK, -ve on error + */ +static void send_click_obj(struct scene *scn, struct scene_obj *obj, int x, + int y, struct expo_action *event) +{ + if (scene_obj_can_highlight(obj) && scene_obj_within(scn, obj, x, y)) { + event->type = EXPOACT_OPEN; + event->select.id = obj->id; + log_debug("open obj %d\n", event->select.id); + return; + } + + log_debug("no object; finding...\n"); + obj = scene_find_obj_within(scn, x, y); + if (obj) { + event->type = EXPOACT_POINT_OPEN; + event->select.id = obj->id; + } +} + +static int scene_click_popup(struct scene *scn, int x, int y, + struct expo_action *event) +{ + struct scene_obj *obj, *chk; + + obj = NULL; + if (scn->highlight_id) { + obj = scene_obj_find(scn, scn->highlight_id, + SCENEOBJT_NONE); + } + if (!obj) + return 0; + + if (!(obj->flags & SCENEOF_OPEN)) { + send_click_obj(scn, obj, x, y, event); + return 0; + } + + /* check that the click is within our object */ + chk = scene_find_obj_within(scn, x, y); + log_debug("chk %d '%s' (obj %d '%s')\n", chk ? chk->id : -1, + chk ? chk->name : "(none)", obj->id, obj->name); + if (!chk) { + /* click into space */ + event->type = EXPOACT_CLOSE; + event->select.id = obj->id; + return 0; + } else if (chk != obj) { + send_click_obj(scn, chk, x, y, event); + if (event->type == EXPOACT_OPEN) { + event->type = EXPOACT_REPOINT_OPEN; + event->select.prev_id = obj->id; + } + return 0; + } + + /* click within the open object */ + switch (obj->type) { + case SCENEOBJT_NONE: + case SCENEOBJT_IMAGE: + case SCENEOBJT_TEXT: + case SCENEOBJT_BOX: + break; + case SCENEOBJT_MENU: { + struct scene_obj_menu *menu; + + menu = (struct scene_obj_menu *)obj, + scene_menu_send_click(scn, menu, x, y, event); + break; + } + case SCENEOBJT_TEXTLINE: { + struct scene_obj_textline *tline; + + tline = (struct scene_obj_textline *)obj; + // ret = scene_textline_send_click(scn, tline, x, y, event); + // if (ret) + // return log_msg_ret("key", ret); + break; + } + case SCENEOBJT_TEXTEDIT: + /* TODO(sjg@chromium.org): Implement this */ + break; + } + + return 0; +} + +int scene_send_click(struct scene *scn, int x, int y, struct expo_action *event) +{ + struct scene_obj *obj; + + event->type = EXPOACT_NONE; + + if (scn->expo->popup) { + scene_click_popup(scn, x, y, event); + return 0; + } + + obj = scene_find_obj_within(scn, x, y); + log_debug("non-popup obj %d '%s'\n", obj ? obj->id : -1, + obj ? obj->name : "(none)"); + if (!obj) + return 0; + + switch (obj->type) { + case SCENEOBJT_NONE: + case SCENEOBJT_IMAGE: + case SCENEOBJT_TEXT: + case SCENEOBJT_BOX: + /* These objects don't handle clicks directly */ + break; + case SCENEOBJT_MENU: { + struct scene_obj_menu *menu; + + menu = (struct scene_obj_menu *)obj, + scene_menu_send_click(scn, menu, x, y, event); + break; + } + case SCENEOBJT_TEXTLINE: { + /* For now, just highlight the textline */ + scn->highlight_id = obj->id; + break; + } + case SCENEOBJT_TEXTEDIT: + /* For now, just highlight the textedit */ + scn->highlight_id = obj->id; + break; + } + + return 0; +} + int scene_obj_calc_bbox(struct scene_obj *obj, struct vidconsole_bbox bbox[]) { switch (obj->type) { diff --git a/boot/scene_internal.h b/boot/scene_internal.h index 91828538417..0bc6f45cdcb 100644 --- a/boot/scene_internal.h +++ b/boot/scene_internal.h @@ -265,6 +265,18 @@ int scene_send_key(struct scene *scn, int key, struct expo_action *event); */ bool scene_within(const struct scene *scn, uint id, int x, int y); +/** + * scene_obj_within() - check if a point is considered within an object + * + * @scn: Scene to check + * @menu: Menu to check + * @x: X coordinate of the point + * @y: Y coordinate of the point + * Return: true if the point is considered within the object, false if not + */ +bool scene_obj_within(const struct scene *scn, struct scene_obj *obj, + int x, int y); + /** * scene_menu_within() - check if a point is considered within a menu * @@ -290,6 +302,17 @@ struct scene_menitem *scene_menu_within(const struct scene *scn, bool scene_textline_within(const struct scene *scn, struct scene_obj_textline *tline, int x, int y); +/** + * scene_send_click() - process a mouse click in a scene + * + * @scn: Scene to receive the click + * @x: X coordinate of the click + * @y: Y coordinate of the click + * @event: Returns resulting event from this click + * Returns: 0 if OK, -ve on error + */ +int scene_send_click(struct scene *scn, int x, int y, struct expo_action *event); + /** * scene_render_deps() - Render an object and its dependencies * From patchwork Mon Sep 15 12:28:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 332 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=1757939422; bh=ZNk9OwUIM9AbNY+xMnbTOJECOxoiRYyCqwZ750Jr9/w=; 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=ibVHlQRE25pgRUUgr5V+of2m9mUCz6/opk7UnNZ70lTIzfer8pGmG6MKvt0Z0xCBt GX9vbi8xpUSkmBvcPtrCJfORuOHk2L94Hl97yqnzGYvF+zcU4yBp8Dqh4yEU5VL6Hu 2qUkKmC3rLDNQpbTi3LE3mUd8u8PrD9cD0KZSZWgWpPy3zm0blgSwYmp9WwBml+rWs HoVhW8Xkn5SeztsnUGpxj6E7HCiJvdbEcNDycmLbhaOBMPWigyzkbVwYXx1J92DmeE /ye8Sfev0QL3Z9zDiCXewq9gHwLGMzEoeSLM/86EwClH+PBVgGcG7xqS8ZwUVFCGp9 MbeoiMt8jbqUg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 7C49D67BE1 for ; Mon, 15 Sep 2025 06:30:22 -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 YRoYlO9q347q for ; Mon, 15 Sep 2025 06:30:22 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939422; bh=ZNk9OwUIM9AbNY+xMnbTOJECOxoiRYyCqwZ750Jr9/w=; 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=ibVHlQRE25pgRUUgr5V+of2m9mUCz6/opk7UnNZ70lTIzfer8pGmG6MKvt0Z0xCBt GX9vbi8xpUSkmBvcPtrCJfORuOHk2L94Hl97yqnzGYvF+zcU4yBp8Dqh4yEU5VL6Hu 2qUkKmC3rLDNQpbTi3LE3mUd8u8PrD9cD0KZSZWgWpPy3zm0blgSwYmp9WwBml+rWs HoVhW8Xkn5SeztsnUGpxj6E7HCiJvdbEcNDycmLbhaOBMPWigyzkbVwYXx1J92DmeE /ye8Sfev0QL3Z9zDiCXewq9gHwLGMzEoeSLM/86EwClH+PBVgGcG7xqS8ZwUVFCGp9 MbeoiMt8jbqUg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 662A267B3C for ; Mon, 15 Sep 2025 06:30:22 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939420; bh=cJEDmOeAyCdG6uyejtC1rBcFFWWvEbqABnsMc1jLmrg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tMUILTs2YWYn/2jleGkPF9Kvo+cmm8ipidGEawGM67TMbOxr1ndjz8MOu0791LqeU RvsnXMOoqykvIu5Y8MBXUog9JxnbzjSuIrtUWKtn9Pw1sWqiZNGRcEaiEZZRNvwIz4 aPponCPi2zezwHxUarjXwGuBuMMnnfTNjOHdOdKmhvlgpxnVNwCID8+7fq8HMkyOfD 8qC7vp1P6IYJ4eHeWME0/NsGUozyc2uNv8JCuRMlfHMQsw4WZaIgRwoYjpzTS3qg6R kCVPGhvzDlGNJWbk4Z6qT+9Xe3i2KzT01c9CPFN0wdOZ8RCjyNxViFJIhlcmiwssZ+ TOmSoM32J8MHw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 33E6567BAC; Mon, 15 Sep 2025 06:30:20 -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 Wt2hPbKMs2rJ; Mon, 15 Sep 2025 06:30:20 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939419; bh=74uFzuJAuAwbUHxmGOGsgdNUxGD0F/lbmzlNyglKH6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hA1pP/p0kGKXHHLngGYl2zU6wgDt7RD1fPH9hPPVCnBAcqSFb3f73CcIFOAZHhta1 EjBbF+bKtBeZ+j+E2l7iUEOG3x5TzN0FCVBPFy60HJxQfxn0lJK4VBuroiDL/csItQ NesEnn9sT1VsIHc3yMJAMiCJsr2ocp+/X3Y9pRicyk1bWSdrrHjYDuetnPV4d97q1I +6bSxfp+ATTgwtqO1Pok4X6aDpLtyESif8IU8SATUC2BHMK3YOcMQHoIoAjbKuqh1G lnDt3xt6j1KgAMbQN0NWhrJYrKmnTeAUwBnXYGWbggKWd14ELk4m7yo851oYwXIho4 M00npymRFS0RA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id AA0AF67B34; Mon, 15 Sep 2025 06:30:19 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:50 -0600 Message-ID: <20250915122905.1217249-18-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: 27J2HPXKVYTC3LEZYWR4XERTHXUY7BNF X-Message-ID-Hash: 27J2HPXKVYTC3LEZYWR4XERTHXUY7BNF 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 17/23] expo: Support sending a click to an expo 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 Implement clicking on an expo, which simply passes it onto the scene. For now, there are no callers for this function. Signed-off-by: Simon Glass --- boot/expo.c | 24 ++++++++++++++++++++++++ include/expo.h | 13 +++++++++++++ 2 files changed, 37 insertions(+) diff --git a/boot/expo.c b/boot/expo.c index e18f149a22f..b4fa4fdd488 100644 --- a/boot/expo.c +++ b/boot/expo.c @@ -292,6 +292,30 @@ int expo_send_key(struct expo *exp, int key) return scn ? 0 : -ECHILD; } +int expo_send_click(struct expo *exp, int x, int y) +{ + struct scene *scn = NULL; + + if (exp->scene_id) { + int ret; + + scn = expo_lookup_scene_id(exp, exp->scene_id); + if (!scn) + return log_msg_ret("scn", -ENOENT); + + ret = scene_send_click(scn, x, y, &exp->action); + if (ret) + return log_msg_ret("click", ret); + + /* arrange it to get any changes */ + ret = scene_arrange(scn); + if (ret) + return log_msg_ret("arr", ret); + } + + return scn ? 0 : -ECHILD; +} + int expo_action_get(struct expo *exp, struct expo_action *act) { *act = exp->action; diff --git a/include/expo.h b/include/expo.h index a860ba901e4..d6983ee77d4 100644 --- a/include/expo.h +++ b/include/expo.h @@ -1064,12 +1064,25 @@ int scene_arrange(struct scene *scn); /** * expo_send_key() - set a keypress to the expo * + * This processes the key, taking any action that is needed, such as moving + * between menu items or editing the text in a textline + * * @exp: Expo to receive the key * @key: Key to send (ASCII or enum bootmenu_key) * Returns: 0 if OK, -ECHILD if there is no current scene */ int expo_send_key(struct expo *exp, int key); +/** + * expo_send_click() - send a mouse click to the expo + * + * @exp: Expo to receive the click + * @x: X coordinate of click + * @y: Y coordinate of click + * Returns: 0 if OK, -ECHILD if there is no current scene + */ +int expo_send_click(struct expo *exp, int x, int y); + /** * expo_action_get() - read user input from the expo * From patchwork Mon Sep 15 12:28:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 333 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=1757939423; bh=bbSLv9fsMHZ6vmK9ERqB01RvHBK5E+Q+11ZMTjKeoLc=; 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=JiX8yvSBIG7DvR+Yw0jrvRJ/o5yIeFBcb9htaXsc9BEMBmU3qjXhkT3+5jUTOXMzp sQvkUMZhS83/j+/wYsTPVg28JH90PJfmnTvICQ1sXFYG0PKGDQK1ylJFWpWHq0SMnd /Fzxhb26fv9H6SnzNLFhN7W6ceQBbT/rt4hiM3j24R05b/A9qmS3Nv3GQpCIymTLdh aWw9e42B4p1q62X/HuHPbFiFmqQ0i5wwkHXrz42ZJAZbsefP+9rtUg84zuPc20wsRR aLscOSJfNT2jOmKv8mIQrgVmNcWW1vLSoKDZYx4tlhMQS42h+TLPatk8bWAJ2Jo9hE 3nBdZWr8pob2w== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id B7D5F67BE2 for ; Mon, 15 Sep 2025 06:30:23 -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 3drvEq5bPC0P for ; Mon, 15 Sep 2025 06:30:23 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939423; bh=bbSLv9fsMHZ6vmK9ERqB01RvHBK5E+Q+11ZMTjKeoLc=; 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=JiX8yvSBIG7DvR+Yw0jrvRJ/o5yIeFBcb9htaXsc9BEMBmU3qjXhkT3+5jUTOXMzp sQvkUMZhS83/j+/wYsTPVg28JH90PJfmnTvICQ1sXFYG0PKGDQK1ylJFWpWHq0SMnd /Fzxhb26fv9H6SnzNLFhN7W6ceQBbT/rt4hiM3j24R05b/A9qmS3Nv3GQpCIymTLdh aWw9e42B4p1q62X/HuHPbFiFmqQ0i5wwkHXrz42ZJAZbsefP+9rtUg84zuPc20wsRR aLscOSJfNT2jOmKv8mIQrgVmNcWW1vLSoKDZYx4tlhMQS42h+TLPatk8bWAJ2Jo9hE 3nBdZWr8pob2w== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A7B2A67BC8 for ; Mon, 15 Sep 2025 06:30:23 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939421; bh=+cmqnh0LasC3X5dBVr71V/mx+Jn8tbYbF4ZNdRPeefs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Swzzt/Du2pqg6IbtyTAh8fSTajwR1dxIzqEugO+W+I3y2ZqwC5VJ/p/NR3XAB19/H 6LbsZuiyUEt+XCTYDsmb45g2hKUzTVHEtdHHYKWVTYTIFWP3Y4lEgmzw0EiVzPuPJh uE4mOuvhdOWApRtXekzbWcNrZZJVFbxSOBrOnzMknT7hzEtAYEbW1zC3RktP5UF/A9 XwGMjaf3HLC4XgfT39Ve9+gxZzdICyTPoK1/ihl3GjTmEyozQ5vM/qaz14dKu9pEe6 I51Y9KWEpJEVYM8EoCGzX+n3vmTvbIbC0AIUZuRTclH57NfI31Bxo04//KVGuhWZXd RE56CD+Q2pYSA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 00A3367B3C; Mon, 15 Sep 2025 06:30:21 -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 xpnYDJ0QpRjr; Mon, 15 Sep 2025 06:30:20 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939420; bh=EhJ0l0dvUJlBZTZt4+1sG4WVxtrU4qKjtt9PUsFMl7s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DN/jPhlTwojRGGN8NXMBey/AI4KRTmV3miTgK27pl3DZt0poo1hKFsz/nlw8SYjrW V33bgtuXItRiJUCFmaa6vXR0SXze4mDHDp7hVi6fWc52Ckz1B8oAXZxP59Bkf5vkYi JfPVCoiP4xoaU+Gk1yns9m2hY374By4k01quyflFBg0TXHj4uJNsQqKdUGxXLyWRCP Zn2ZiTDTH0CYTvSrgDEJQZK5ssBqbXvZpNsLr5lkG4pwdk2gnSCAAptIHqmGH41dss 8igE4iA2Pa4HZuG7DV/f6NVLLktBLhDm49CxcBZVI970KbNbTGjzHtud2bpdglnp+P /r7rAu3fmVSqg== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 71A7467B34; Mon, 15 Sep 2025 06:30:20 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:51 -0600 Message-ID: <20250915122905.1217249-19-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: VPXTI7XY74GJT7U3NTS4ECSW5F3G2FPN X-Message-ID-Hash: VPXTI7XY74GJT7U3NTS4ECSW5F3G2FPN 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 18/23] expo: Refactor expo_poll() to separate out key handling 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 In preparation for supporting mouse clicks, split the key-handling part of this function into a separate poll_keys() function. Signed-off-by: Simon Glass --- boot/expo.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/boot/expo.c b/boot/expo.c index b4fa4fdd488..f9573858082 100644 --- a/boot/expo.c +++ b/boot/expo.c @@ -382,9 +382,9 @@ int expo_iter_scene_objs(struct expo *exp, expo_scene_obj_iterator iter, return 0; } -int expo_poll(struct expo *exp, struct expo_action *act) +static int poll_keys(struct expo *exp) { - int ichar, key, ret; + int ichar, key; ichar = cli_ch_process(&exp->cch, 0); if (!ichar) { @@ -407,10 +407,17 @@ int expo_poll(struct expo *exp, struct expo_action *act) if (key == BKEY_NONE || key >= BKEY_FIRST_EXTRA) key = ichar; } - if (!key) - return -EAGAIN; - ret = expo_send_key(exp, key); + return key ? key : -EAGAIN; +} + +int expo_poll(struct expo *exp, struct expo_action *act) +{ + int key, ret = -EAGAIN; + + key = poll_keys(exp); + if (key != -EAGAIN) + ret = expo_send_key(exp, key); if (ret) return log_msg_ret("epk", ret); ret = expo_action_get(exp, act); From patchwork Mon Sep 15 12:28:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 334 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=1757939428; bh=iZ10K2RoOYC8Z1xy6m/8VbJncVttH6w2Wr3jA1pyK60=; 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=ZNtMG/qKwEI+zZSvP54AgtLeZ5rhN+UNWblYfvdM8NLkexZcbDF6kMEJpikDy0Wng 607tB++CflgIlYSnTauYB4TT/0gHLu5L4bNcbDidDRnJnFZnxvEY3ecvhTjsr5Q9Bs IBAjebXhiuOAnC7+6GsM9tmh0F+oBnbYStcL3ib3/dmjCSrlJoHi+UIPgcnGJ1rJxE 6LgRqHTMkJRzC6YY1LGjBQdsMaZPvEUb9SfeGn1jVxnG65wootw6fzwIhPmnbfnARL nab+gckRvj0YTuu39CaXZsBX6YArfRxd3zO685Wyb287Zhdi3jZ3I8EWa35HuBfRYl SVELqRrt7a2BA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 3960B67B3C for ; Mon, 15 Sep 2025 06:30:28 -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 UE8XnxbKg9xb for ; Mon, 15 Sep 2025 06:30:28 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939428; bh=iZ10K2RoOYC8Z1xy6m/8VbJncVttH6w2Wr3jA1pyK60=; 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=ZNtMG/qKwEI+zZSvP54AgtLeZ5rhN+UNWblYfvdM8NLkexZcbDF6kMEJpikDy0Wng 607tB++CflgIlYSnTauYB4TT/0gHLu5L4bNcbDidDRnJnFZnxvEY3ecvhTjsr5Q9Bs IBAjebXhiuOAnC7+6GsM9tmh0F+oBnbYStcL3ib3/dmjCSrlJoHi+UIPgcnGJ1rJxE 6LgRqHTMkJRzC6YY1LGjBQdsMaZPvEUb9SfeGn1jVxnG65wootw6fzwIhPmnbfnARL nab+gckRvj0YTuu39CaXZsBX6YArfRxd3zO685Wyb287Zhdi3jZ3I8EWa35HuBfRYl SVELqRrt7a2BA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 27DDC67BCB for ; Mon, 15 Sep 2025 06:30:28 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939425; bh=OQ0oso+ge1uJ/jfphbwh1V7A0fOgkgF5yA/91NrbeFc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hRqHN798qZN7zCONGA8aRfs/6xWX4ZuycqZ4hLdvOYwZ3aSTpYssp9Py675Xwa0hq UlEqNbWkXkcDpv0heNzywMQUzaBWUsSLmHJ5ibztJ5LW7GUQYfQOmpBQBWz0enJD8c JXtAgOK/sDCKDEpAzGdrGM8pl3qbneBXfUJPmqaF6toGVBb0eTn5PlpL46LdfYfM9g DpDd+HElAIFCkyPYmYmjALXrctomPGAhGRsDtm/dcjQ01I7UH0uo+oMI1foCDYB1hI afEsI6spH6rPKpctJ8kVo5A0cjnxRta6isyr4o2ujRq1zUgNum/BXB/S7sXI/jj/yU Agri0oETaJQyw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 9026D67BAC; Mon, 15 Sep 2025 06:30:25 -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 64WBt5y6w-2o; Mon, 15 Sep 2025 06:30:25 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939421; bh=gsDFf9tbsf561sfZ4QBFwzYe/6U7YZEHpbjCgUlbFTI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GHwCJgSc96/PtRtrcdmVGd8t58xYZgp2MBw/UYawBLss//qJ5p8PoCWG1xfWrGF4E xvgbHvL4n+VxR2Ed3yIDZ1wSNH16ym4XyG4bJRo2FMJfaulpMzVDSl585qojQIvk8A QBMuaTFyRXqPGj0PzcIftRsjz7U1jfj+SB7qX15AkwtYc2lBEd8VJSAy3RZRQbttc6 BOm/T1v9b0YwdJrG+MkKMt9BNUNaQjDM1wM7bc2LjIB1JiAZZ3PQBajvRH76NlSPgd JlcysHPdmSqkGjcd+Z2TLtDeniXFuXdGF5wog/TqT9M2vnkuXDLxVFCTcr49I0pYfm wRpdc8pcDOgTg== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 4107967B34; Mon, 15 Sep 2025 06:30:21 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:52 -0600 Message-ID: <20250915122905.1217249-20-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: HWZMMLE6YW3PYEFCQODK7KDUTX5M5OXL X-Message-ID-Hash: HWZMMLE6YW3PYEFCQODK7KDUTX5M5OXL 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 19/23] expo: Check the mouse when polling 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 If no key is pressed, check for a mouse click and process that, if available. Signed-off-by: Simon Glass --- boot/expo.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/boot/expo.c b/boot/expo.c index f9573858082..00924a19d27 100644 --- a/boot/expo.c +++ b/boot/expo.c @@ -411,15 +411,42 @@ static int poll_keys(struct expo *exp) return key ? key : -EAGAIN; } +static int poll_mouse(struct expo *exp, int *xp, int *yp) +{ + int ret, x, y; + + if (!exp->mouse_enabled) + return -EAGAIN; + + /* First check if we have a click available */ + ret = mouse_get_click(exp->mouse, &x, &y); + if (ret) + return log_msg_ret("epm", ret); + + *xp = x; + *yp = y; + + return 0; /* Click available */ +} + int expo_poll(struct expo *exp, struct expo_action *act) { int key, ret = -EAGAIN; key = poll_keys(exp); - if (key != -EAGAIN) + if (key != -EAGAIN) { ret = expo_send_key(exp, key); + } else if (IS_ENABLED(CONFIG_MOUSE)) { + int x, y; + + ret = poll_mouse(exp, &x, &y); + if (!ret) + ret = expo_send_click(exp, x, y); + } if (ret) return log_msg_ret("epk", ret); + + /* get the action (either a key or a click) */ ret = expo_action_get(exp, act); if (ret) return log_msg_ret("eag", ret); From patchwork Mon Sep 15 12:28:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 335 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=1757939430; bh=mdXf7fA4D3ZDPSjXLueW3OUP+29sRof+8hQMN5HugMw=; 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=rqiNUzDuqyR7dhjaaD00Ij1vxdnUmCNxRwkYK+QLUqmbzSfHfjBkrtQKFTKBES9tm tFEAovtRNpCLkDCeNO3mg8Z2DMhNA2Bfj8K+lfWkVHbtBwsnaFHMeKMfBdaw30vgTm YY23dPIpUbVoTqwgitLdtWKXkFHDSvrYcZ4SHOWEBf7FyGsJkxSf5soTa2UhdDyizW x3Ay688g/LNxvnoOxPQ77mJlCmWlzAHN1ceDeccQJgdV4u2fO1xSONjLosXeW3m9Sj TLPLnmQ/bXLRYX91OskLHwWayPuDTF8hMPBMPBg9myMB3vFlD8gyuXJI9lMlxRHyuK DaZfajqeI8aCA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id EBAFD67B3C for ; Mon, 15 Sep 2025 06:30:30 -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 CJdgRSsK1dUT for ; Mon, 15 Sep 2025 06:30:30 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939430; bh=mdXf7fA4D3ZDPSjXLueW3OUP+29sRof+8hQMN5HugMw=; 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=rqiNUzDuqyR7dhjaaD00Ij1vxdnUmCNxRwkYK+QLUqmbzSfHfjBkrtQKFTKBES9tm tFEAovtRNpCLkDCeNO3mg8Z2DMhNA2Bfj8K+lfWkVHbtBwsnaFHMeKMfBdaw30vgTm YY23dPIpUbVoTqwgitLdtWKXkFHDSvrYcZ4SHOWEBf7FyGsJkxSf5soTa2UhdDyizW x3Ay688g/LNxvnoOxPQ77mJlCmWlzAHN1ceDeccQJgdV4u2fO1xSONjLosXeW3m9Sj TLPLnmQ/bXLRYX91OskLHwWayPuDTF8hMPBMPBg9myMB3vFlD8gyuXJI9lMlxRHyuK DaZfajqeI8aCA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id D881F67B44 for ; Mon, 15 Sep 2025 06:30:30 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939430; bh=lVpuhtXdjySD42y5MyaPQjF7sxi1MtLP5X2Geo/usBo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CGeibeypGCFYvQKj738HhNJjGq0G0zlLCZUuzUfuOFrBdHmsInDmxlgd4D4l4QAnH zXZUFWtS3idjcP+b0G8Q+9SZ5ZfoiZyxEH/2mYIWjCPXlp+N4Iv58Wh8hz28ZEOt3U tdcsQXiRJqzNlB9V/0rTxWUbjXO0fw8kKxLWzYJeLVIdA3y7MxxJNQYIpsDDz2dsfo hLz4XVLWX7HrQ7Q/D0owjseA9zwFgrsS8Ozopz3sDoDM7csa45EN4OzhYpcg7vVtXQ JHjcsSK34dLsN/Uyv89nJ2CapZu5irNlWlRxPIT/UKReRqf2gIBYG8n5f68Yon/+tb PzQx0VCUX/b+A== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 20BCB67A04; Mon, 15 Sep 2025 06:30:30 -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 pnMcOf-3Ovzu; Mon, 15 Sep 2025 06:30:30 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939426; bh=af9Q9t/vLQ1LNtE6Fms0/8Lyjg/NByrfEBxgw0C9tm4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CCB8NAOZ/IFqnkZn6shu8v9g6x+smCTMdkRENnlQe5VjOAtj5sH8HzsY34A0HY/DH P4Zk7wKYGF1aVV/NMO/FYpZxPr0YCiEE/OxhiYfKjklaI/NQAcGPmoMBrfKXsiavXx 9vr8LVR9vRwSQw48L26oLS2UOKAchQmiWVVwtJO31jKVOmqJrVp8NsaNQS+SENAWkw QhJZ6qo/Xcwe50emZYK/zqE6gBDDnTrSp8GOtvL4f95dE2lr61euwVBOzvx96Cty/a 8cq2cQRn1E3Dopy40MPP1CxKeUDO9nEKgu+zdCb7eG6BiT6rBmY7ojTemq6HBkI25h NepOWHUwarHlA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id CC9B667B34; Mon, 15 Sep 2025 06:30:25 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:53 -0600 Message-ID: <20250915122905.1217249-21-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: WDIMHKNWKADLRY2VDF2ZIBS5PLJFTMUP X-Message-ID-Hash: WDIMHKNWKADLRY2VDF2ZIBS5PLJFTMUP 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 20/23] expo: Enable the mouse when available 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 When creating a new bootflow menu or cedit, enable the mouse, so the user can interact with the expo more easily. Signed-off-by: Simon Glass --- boot/bootflow_menu.c | 2 ++ boot/cedit.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c index dc075a8f4b2..602a2e33c88 100644 --- a/boot/bootflow_menu.c +++ b/boot/bootflow_menu.c @@ -51,6 +51,8 @@ int bootflow_menu_new(struct expo **expp) return log_msg_ret("exp", ret); expo_req_size(exp, 1366, 768); + expo_set_mouse_enable(exp, true); + ret = scene_new(exp, "main", MAIN, &scn); if (ret < 0) return log_msg_ret("scn", ret); diff --git a/boot/cedit.c b/boot/cedit.c index ab1a79c1412..ad2c98aa7a5 100644 --- a/boot/cedit.c +++ b/boot/cedit.c @@ -243,6 +243,8 @@ int cedit_run(struct expo *exp) return log_msg_ret("prep", ret); scene_id = ret; + expo_set_mouse_enable(exp, true); + exp->done = false; exp->save = false; do { From patchwork Mon Sep 15 12:28:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 336 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=1757939433; bh=eHLDGkMLhmV/z5Wqlv345DECszwxYbRlZMhnFUag/uI=; 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=l5SqhMhH2bcjlvO/mzYAZFvvvOmjrEhSy66DZPvPaG80WL02xevHV5ymVRZQ/14mU LfHYcOin7ZXDNnGLYdKDSv559C+0TI6FQAq0y+8SFJNkxRBUkdhIsZass9ZwlyzzMR taCOZYnNK+nMcmZ+xcBOsXVCxdFuv7eGVvhAn/g+TLoZXjg1HOJkQqfK6OGP/lkHXw gAGJq9aM9lKtJrUWNjjf/XkZI0vhNg1yCaCfUm6izz4pfRqf1YRR26fllwo/PBlpjr vsFPul+4OW2QEtHK1pv4WYVfss2wPft2eWgoCMcytNptcjdBGxzzCh/CqDDukGyS70 hzNIEx2bdxCAg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 6A9AD67BE2 for ; Mon, 15 Sep 2025 06:30:33 -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 s-9dsEQwJonR for ; Mon, 15 Sep 2025 06:30:33 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939432; bh=eHLDGkMLhmV/z5Wqlv345DECszwxYbRlZMhnFUag/uI=; 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=PnMjDFiHp0UTu0cWOCxB9XOUEjBVLJiSgzzEKzKyPDyKjdDeqGmIU/+SNTTqsvPtY VjsaJjj79KvPIjmW6oMfNo334R5Jmsd6EFP195BYwKObm4sZIX1OhQdrdU7dBTrJ1E CWRrWpHX105lzcDI0U8bi0Z1UHYNh3NnJWZpZZ5SUM6dBLh1f8pbNg/cDjE1P7m9JA fEXpzc+8k4MoDhEJfJRRJ7Khe5kWereTpICyf/BX/BYyLTrBZRpCpETOEn18Nmzko0 T7uAVY5pWsNM05qRZ0cyEhsFhFb+MoYihE3lah972k31vdznpcys5jaaEXBc9mBU3/ n1+PrpVuRqfQA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 63E1567B34 for ; Mon, 15 Sep 2025 06:30:32 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939431; bh=kha969gy7Hzr40G3bLtykG6UIKNsGfbbAlvqhxfQRtI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AhwQC7YMafblAlODxg8RtqhNVy5GTgG513pqItgV7+8Q8devQEhQHVjd+h/WwmvG3 tG2rAsrpgxXbfTlGMZWtt5v9+8amd9DRNu8RbJDJB5UI9LiFuAYnHiWBPvB7YzErXs 9bN77/OekpBS+UYOBHL8ZfGvY0v8Pzl0NAqmfmlnCn1CDApxw2KBHv8Rr33bS9h1+Z DJIIY4lWjgIty4YxQJdjGlyTqJ1QytVBhbq5RM9xZydZrsLuI999Tib86qrsXnE6En SiSn9szldOQboYddPxCl7yHUp/mtvxnA6IXsw4YpHqacLLlXousM6bBXV4q5Il5mDm XocZlrtIn3eVw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 19B0967BDA; Mon, 15 Sep 2025 06:30:31 -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 RbLtgbKLt900; Mon, 15 Sep 2025 06:30:31 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939430; bh=2R4UDncuwSAdUvvN2ZAPUw/+m2Wi9zTB9xIzQ09xiSU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dRtxJmeVBCbTWRovUSrTb/hw66H9ps2yosl6swUVaQGNwtOLNzc92omlqgksNx3bq UbPmMYsvfMYWJ8HHgwnL8sl1dSL6eD20jwrSzzsTBQSWXAQUqFfYqNJrnkf94iB7nu MPiN+VAuDno4nx4YONqiO5cMLC/SJS0YNAw08EzKtXE8Fhu+RahTnZahAaTrTKBPbZ gi8IAPJtzdpm/DRr3ojldTuiWAzkmI/8n5/M+7YCOCrrTg63mZAjus0HRachQX1+TJ 6PlecPljHUV9i9Thxf1QLSfwYu6Ppzy9mPbHUF1ibeawsGjKNVYDwAuEsHGdZUlS8I CM0Be2Oy4nhxQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 5F77167B34; Mon, 15 Sep 2025 06:30:30 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:54 -0600 Message-ID: <20250915122905.1217249-22-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: 64YAA6XK3BT42G6JW7AMDDTCSDUFH7HU X-Message-ID-Hash: 64YAA6XK3BT42G6JW7AMDDTCSDUFH7HU 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 21/23] expo: Add a test helper for clicking on objects 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 Provide a way to click on an object and check that the expected action resulted. Put it in a common file so it can be used by cedit and expo tests. Tidy up the include-order in both cedit and expo. Signed-off-by: Simon Glass --- test/boot/Makefile | 4 ++-- test/boot/cedit.c | 3 ++- test/boot/expo.c | 3 ++- test/boot/expo_common.c | 24 ++++++++++++++++++++++++ test/boot/expo_common.h | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 test/boot/expo_common.c create mode 100644 test/boot/expo_common.h diff --git a/test/boot/Makefile b/test/boot/Makefile index e8b423b0c43..7c492ba92af 100644 --- a/test/boot/Makefile +++ b/test/boot/Makefile @@ -6,8 +6,8 @@ ifdef CONFIG_UT_BOOTSTD obj-$(CONFIG_BOOTSTD) += bootdev.o bootstd_common.o bootflow.o bootmeth.o obj-$(CONFIG_FIT) += image.o -obj-$(CONFIG_EXPO) += expo.o -obj-$(CONFIG_CEDIT) += cedit.o +obj-$(CONFIG_EXPO) += expo.o expo_common.o +obj-$(CONFIG_CEDIT) += cedit.o expo_common.o endif ifdef CONFIG_SANDBOX diff --git a/test/boot/cedit.c b/test/boot/cedit.c index 3426bf13ec3..425e4a1fe41 100644 --- a/test/boot/cedit.c +++ b/test/boot/cedit.c @@ -10,10 +10,11 @@ #include #include #include +#include #include #include #include "bootstd_common.h" -#include +#include "expo_common.h" #include "../../boot/scene_internal.h" /* Check the cedit command */ diff --git a/test/boot/expo.c b/test/boot/expo.c index e8674d359d7..21bfd8e586b 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -10,10 +10,11 @@ #include #include #include +#include #include #include #include "bootstd_common.h" -#include +#include "expo_common.h" #include "../../boot/scene_internal.h" enum { diff --git a/test/boot/expo_common.c b/test/boot/expo_common.c new file mode 100644 index 00000000000..5ee0ca79fb1 --- /dev/null +++ b/test/boot/expo_common.c @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Common functions for expo tests + * + * Copyright 2025 Simon Glass + */ + +#include +#include +#include "../../boot/scene_internal.h" + +int click_check(struct unit_test_state *uts, struct scene *scn, uint id, + enum expoact_type expect_type, struct expo_action *act) +{ + struct scene_obj *obj; + + obj = scene_obj_find(scn, id, SCENEOBJT_NONE); + ut_assertnonnull(obj); + ut_assertok(scene_send_click(scn, (obj->bbox.x0 + obj->bbox.x1) / 2, + obj->bbox.y0 + 5, act)); + ut_asserteq(expect_type, act->type); + + return 0; +} diff --git a/test/boot/expo_common.h b/test/boot/expo_common.h new file mode 100644 index 00000000000..e3ae1d1dd59 --- /dev/null +++ b/test/boot/expo_common.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Common functions for expo tests + * + * Copyright 2025 Simon Glass + */ + +#ifndef __expo_common_h +#define __expo_common_h + +#include + +enum expoact_type; +struct expo_action; +struct scene; +struct unit_test_state; + +/** + * click_check() - Click on an object and check the resulting action type + * + * Clicks halfway along the object, 5 pixels from the top + * + * @uts: Test state + * @scn: Scene containing the object + * @id: ID of object to click on + * @expect_type: Expected action type + * @act: Returns the action from the click + * Returns: 0 if OK, 1 if assertion failed + */ +int click_check(struct unit_test_state *uts, struct scene *scn, uint id, + enum expoact_type expect_type, struct expo_action *act); + +#endif From patchwork Mon Sep 15 12:28:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 337 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=1757939437; bh=uzk38dNdII0G/JWmgdedL57o3zhbcAq7fQ9nUYSuj5E=; 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=jpcY+ULin1K9y6RsyKu0Qt9/TSVrYQpVH30mgA5lm//Ie0o33SUHMyr9318cxLzRS 7Tgqk1gwQy7C5EcQ9RoP+tI40sUnp/5ghl/pHnTCSOvZTQbtCFAwJAbp24ILPXOCNQ /RooCkgmWJePPxvesnKeP4BKkVv81py0x6ZYCy7ZM2rpWayGJysQovQ3y3YGi1NrEP PpYUcFew3kiDmpeUEMFxNmmNSSjP5rAKl6F2bOFl4kO/dR61A/3bqw+w52he+yWRaG nqoJze4k6I4qqTZ2KMHLP/IDTxtP6odFJ/sS3GyNB+0uvFwHEu+idSHLmFC5aeWhjy uHZLXRIVpfIkg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id CF7BB67BD5 for ; Mon, 15 Sep 2025 06:30:37 -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 Wetcds4fUTEI for ; Mon, 15 Sep 2025 06:30:37 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939437; bh=uzk38dNdII0G/JWmgdedL57o3zhbcAq7fQ9nUYSuj5E=; 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=jpcY+ULin1K9y6RsyKu0Qt9/TSVrYQpVH30mgA5lm//Ie0o33SUHMyr9318cxLzRS 7Tgqk1gwQy7C5EcQ9RoP+tI40sUnp/5ghl/pHnTCSOvZTQbtCFAwJAbp24ILPXOCNQ /RooCkgmWJePPxvesnKeP4BKkVv81py0x6ZYCy7ZM2rpWayGJysQovQ3y3YGi1NrEP PpYUcFew3kiDmpeUEMFxNmmNSSjP5rAKl6F2bOFl4kO/dR61A/3bqw+w52he+yWRaG nqoJze4k6I4qqTZ2KMHLP/IDTxtP6odFJ/sS3GyNB+0uvFwHEu+idSHLmFC5aeWhjy uHZLXRIVpfIkg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id BF81067B44 for ; Mon, 15 Sep 2025 06:30:37 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939435; bh=P1DYPa7YVvNlByfrb76O9p+og2kR1dr1nMG0+8jr5E0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ToCFB4jfWDPV/b+cELQ7hApC7NGqE1VCUiO4jPYNOT9UFjEvYmj1AQjGG2leccZn0 X8+jrtGkhABR1Zf59zmH+qsXc+iOpUN/Ne5QeovUYJfumO+RL9OuRc668iGYO0kxSo XgRL24SV+xRggzGB+ehjqc5192/WCEE5JgbqUY4ZB8Sl8r08K80j8h5HvSeMcc6LO+ DlRzU9xyG24bXJyO2V5CHDWHDH9U2S8QI0ATw/nOjJtm/Nbj10b2EoNT84PX25RMV4 AMmWNgelWykN5+mZOWesjgM/ZYuJOBtlIvPaPL2hMduN9S1dDOkJQJ+JXKsRQz7CzF kP8O1WCDQTLYg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id A567967A04; Mon, 15 Sep 2025 06:30:35 -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 ZozCgB2howPQ; Mon, 15 Sep 2025 06:30:35 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939431; bh=mryv03BKHB1xwKINUBTy7xTLVjHBWztZ4l/5Sa/0ja4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NmRhQDePvb7Dl26fH7CdsFKu+ysfriOYCQabgVVStGYljfme1qsg2cZrJ+vhjYNw7 MzKbDB+xDBaggZTXUKIsOQG7Qak/gsWkBoidTvH+QDyj7Ot0nwWTCNIiAOpXANGVD2 83EiFeJp5i32zTiJ5MWgkdd1HCCz7e+Lg6N0lxR+cZoZkCXC9ms6cFHnHBl7VZRTfa GCsoxJvGNWyhbwRqrkOynBxuf6NbWXQUg+P+pxN5lXEuoaUjIw6ztGPLGb9ll7G+K6 5hnEmYIS90o2iIpXNAKX6x9nPj7gwqftNF+CQb3tfL/xQ51g6yblgKnUiScmpOvrs7 DEPUSJ7UPZnWg== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 5177F67BE5; Mon, 15 Sep 2025 06:30:31 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:55 -0600 Message-ID: <20250915122905.1217249-23-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: MBNDPREMW6JHWFBG5KRWOOEMA3EBSYHX X-Message-ID-Hash: MBNDPREMW6JHWFBG5KRWOOEMA3EBSYHX 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 22/23] expo: Provide a test of cedit mouse behaviour 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 test which checks the various expected features of a cedit when used with a mouse. This includes clicking on menu items and textlines. For now, textedit is not supported. Signed-off-by: Simon Glass --- test/boot/cedit.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/test/boot/cedit.c b/test/boot/cedit.c index 425e4a1fe41..80150a29d37 100644 --- a/test/boot/cedit.c +++ b/test/boot/cedit.c @@ -548,3 +548,108 @@ static int cedit_position(struct unit_test_state *uts) return 0; } BOOTSTD_TEST(cedit_position, UTF_DM | UTF_SCAN_FDT); + +/* Check the cedit handles mouse clicks correctly */ +static int cedit_mouse(struct unit_test_state *uts) +{ + struct scene_obj_menu *speed, *loss; + struct scene_obj_textline *mach; + struct video_priv *vid_priv; + extern struct expo *cur_exp; + struct scene_menitem *item; + struct udevice *dev, *con; + struct expo_action act; + struct stdio_dev *sdev; + struct scene *scn; + struct expo *exp; + + ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0)); + + exp = cur_exp; + sdev = stdio_get_by_name("vidconsole"); + ut_assertnonnull(sdev); + con = sdev->priv; + + dev = dev_get_parent(con); + vid_priv = dev_get_uclass_priv(dev); + ut_asserteq(ID_SCENE1, cedit_prepare(exp, dev, &scn)); + + speed = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_NONE); + ut_assertnonnull(speed); + ut_asserteq(ID_CPU_SPEED, scn->highlight_id); + + loss = scene_obj_find(scn, ID_POWER_LOSS, SCENEOBJT_NONE); + ut_assertnonnull(loss); + + mach = scene_obj_find(scn, ID_MACHINE_NAME, SCENEOBJT_NONE); + ut_assertnonnull(mach); + + item = scene_menuitem_find_seq(speed, 0); + + /* click on the title of the CPU speed (should do nothing) */ + ut_assertok(click_check(uts, scn, speed->title_id, EXPOACT_NONE, &act)); + + /* click on CPU speed to open it */ + 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); + + /* 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); + + /* 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); + + /* click on the second item (1.5 GHz) */ + item = scene_menuitem_find_seq(speed, 1); + ut_assertnonnull(item); + ut_asserteq(ID_CPU_SPEED_2, item->id); + ut_assertok(click_check(uts, scn, item->label_id, + EXPOACT_POINT_CLOSE, &act)); + ut_asserteq(ID_CPU_SPEED_2, act.select.id); + ut_assertok(cedit_do_action(exp, scn, vid_priv, &act)); + + /* 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(ID_CPU_SPEED, scn->highlight_id); + + /* click on the power loss menu to open it */ + item = scene_menuitem_find_seq(loss, 0); + ut_assertnonnull(item); + ut_assertok(click_check(uts, scn, item->label_id, EXPOACT_POINT_OPEN, + &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); + + /* click on CPU speed to open it again */ + item = scene_menuitem_find_seq(speed, 0); + ut_assertok(click_check(uts, scn, item->label_id, EXPOACT_REPOINT_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); + + /* click on the lineedit */ + ut_assertok(click_check(uts, scn, mach->edit_id, + EXPOACT_REPOINT_OPEN, &act)); + ut_asserteq(ID_MACHINE_NAME, act.select.id); + ut_asserteq(ID_CPU_SPEED, act.select.prev_id); + 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); + + return 0; +} +BOOTSTD_TEST(cedit_mouse, UTF_DM | UTF_SCAN_FDT); From patchwork Mon Sep 15 12:28:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 338 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=1757939441; bh=IUKHdnE3IscMDoabFCX5n97u68EP6Aiah5ptta1tRJ8=; 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=Wx1aWQB9ibtIiSKPIEeyB18vwwn2TwUUnlc60Lp91D2Pu6DKwDNXU4hvTbX77K5iV rgYo1KKzPZZMlhI//2e0UTUN+0ybhemzdkW+YrnjEfRbGgIViQpC1WnfPvKvmbyxWO BNQ+j3X/37zx7nfczKIuXxCFNzzo8NZm/9AXRmVXVZtsfBeq/YEFbmZEjHkI5NOAYj IaJiGroZFE9ayQNXkNI3Avw/qLvWe/4hNXubqIJR/VwzI7UcLhrcMeB4PcEFUuMrj9 WIrHCaQixrtQtE63ONhhjnmG1vSG0LDt1Q/IGIh1+HUncvA7REfSqV+annONif5YvH 33sH+mhgwMQ8A== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 3DE3667BD5 for ; Mon, 15 Sep 2025 06:30:41 -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 5RWVP3oCLRGF for ; Mon, 15 Sep 2025 06:30:41 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939441; bh=IUKHdnE3IscMDoabFCX5n97u68EP6Aiah5ptta1tRJ8=; 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=Wx1aWQB9ibtIiSKPIEeyB18vwwn2TwUUnlc60Lp91D2Pu6DKwDNXU4hvTbX77K5iV rgYo1KKzPZZMlhI//2e0UTUN+0ybhemzdkW+YrnjEfRbGgIViQpC1WnfPvKvmbyxWO BNQ+j3X/37zx7nfczKIuXxCFNzzo8NZm/9AXRmVXVZtsfBeq/YEFbmZEjHkI5NOAYj IaJiGroZFE9ayQNXkNI3Avw/qLvWe/4hNXubqIJR/VwzI7UcLhrcMeB4PcEFUuMrj9 WIrHCaQixrtQtE63ONhhjnmG1vSG0LDt1Q/IGIh1+HUncvA7REfSqV+annONif5YvH 33sH+mhgwMQ8A== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2D77667B44 for ; Mon, 15 Sep 2025 06:30:41 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939440; bh=4i3BgKyqbLsiUl6ZtrsSxPiTAmA8uhgOjpOxYXO4Ho8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UK3JyGICrEOPrxpjZrb/v3WOCmet/98SbfsPpzInUapPECl4PDcqGM5BezCpwwR+3 g1uZ9G8JPhnILvv7UPikOYFvpqZWNfgm7u4rUIdIxxjx1a70o0rru+TZS8r7Bt5YsH KNIA1nuwMbP3xKf1MsZjYrZNeJ66wAoershiN0PD9L4+BcNbYf4rGBE2q3v1QxRyJg GEkBV+u9DvKm3HtB9rpjSB3uS+94HddaMVg3KvzH20OiqcCM3GJOVCSz3KuDhifI5t 7zc/apzawOzkBpqdTG+qDgkL92IpgJ7QhbOhAWy9OFeZ5MpzN3oXQBvxlc+iJ+WHw+ HW8CQq3dQSzFQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 360AE67A04; Mon, 15 Sep 2025 06:30:40 -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 1qQMsjq_9ftx; Mon, 15 Sep 2025 06:30:40 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1757939436; bh=BZbxwfWomzTr9nV3yMHAJcTdzCnNIoJBH39OPzOyxGo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LViJaDjclKpQdwFozr/+WGafDHlAvTq74bcukM+67gPibTBBIQxOFcCOKvGr8LcZR s+1YeML2snqUGLBAvB+ymEFbZIBDAY5pHgQRUykUSlTxD450gv2lNUqfv+YZ+BOIkV F7fEQ6J6VOf2xskc/Gha8pVHWwknHLJHQyeR8X5Jt25b4fQwer8mNmj7hImIiILeoo oSBXUcZhwZVmK00af95S4XyJYc4fD/Im03FRBYcAgL7l6Hwpqwoiun+U17GR/RDBMN 5Pvqo3Hdqt16E5yrR6A01l/E++Dp5wh+p9lVNHVYjVKxIABDlaucOVgn5vU+L+dBsk tzrriIdWHBqPw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id E0F9167B34; Mon, 15 Sep 2025 06:30:35 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Mon, 15 Sep 2025 06:28:56 -0600 Message-ID: <20250915122905.1217249-24-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: K3V6B4UY6KXJ6JNPA7CMLGQDTQU2D54D X-Message-ID-Hash: K3V6B4UY6KXJ6JNPA7CMLGQDTQU2D54D 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 23/23] expo: Provide a test of expo mouse behaviour 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 Check the behaviour of non-popup menus with a mouse. Signed-off-by: Simon Glass --- test/boot/expo.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/test/boot/expo.c b/test/boot/expo.c index 21bfd8e586b..7723a301c9f 100644 --- a/test/boot/expo.c +++ b/test/boot/expo.c @@ -1046,8 +1046,54 @@ static int expo_mouse_enable(struct unit_test_state *uts) ut_assertnonnull(exp->mouse); ut_asserteq(UCLASS_MOUSE, device_get_uclass_id(exp->mouse)); + return 0; +} +BOOTSTD_TEST(expo_mouse_enable, UTF_DM | UTF_SCAN_FDT); + +/* Check mouse click functionality */ +static int expo_mouse_click(struct unit_test_state *uts) +{ + struct scene_obj_menu *menu; + struct abuf buf, logo_copy; + struct expo_action act; + struct scene *scn; + struct expo *exp; + + ut_assertok(create_test_expo(uts, &exp, &scn, &menu, &buf, &logo_copy)); + + /* set the scene */ + ut_assertok(expo_set_scene_id(exp, SCENE1)); + + /* arrange the scene so objects have proper bounding boxes */ + ut_assertok(scene_arrange(scn)); + + /* enable mouse input */ + ut_assertok(expo_set_mouse_enable(exp, true)); + + /* click on the first menu-item label */ + ut_assertok(click_check(uts, scn, ITEM1_LABEL, EXPOACT_SELECT, &act)); + ut_asserteq(EXPOACT_SELECT, act.type); + ut_asserteq(ITEM1, act.select.id); + + /* click on the second menu-item label */ + ut_assertok(click_check(uts, scn, ITEM2_LABEL, EXPOACT_SELECT, &act)); + ut_asserteq(EXPOACT_SELECT, act.type); + ut_asserteq(ITEM2, act.select.id); + + /* click on the second menu-item description */ + ut_assertok(click_check(uts, scn, ITEM2_DESC, EXPOACT_SELECT, &act)); + ut_asserteq(EXPOACT_SELECT, act.type); + ut_asserteq(ITEM2, act.select.id); + + /* click in empty space */ + ut_assertok(scene_send_click(scn, 10, 10, &act)); + ut_asserteq(EXPOACT_NONE, act.type); + + abuf_uninit(&buf); + abuf_uninit(&logo_copy); + expo_destroy(exp); return 0; } -BOOTSTD_TEST(expo_mouse_enable, UTF_DM | UTF_SCAN_FDT); +BOOTSTD_TEST(expo_mouse_click, UTF_DM | UTF_SCAN_FDT);