]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
expo: Allow highlighting other scene-object types
authorSimon Glass <sjg@chromium.org>
Mon, 2 Oct 2023 01:13:27 +0000 (19:13 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 11 Oct 2023 19:43:55 +0000 (15:43 -0400)
So far only menus can be highlighted. With the coming addition of
text lines we need to be able to highlight other objects. Add a function
to determine whether an object can be highlighted.

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

index 8e5d3aa7dc05cb6369f6ff6c979652417487eeb0..4d7cabd75f4fbd5832809b6e8db494e683b333f7 100644 (file)
@@ -516,7 +516,7 @@ static void send_key_obj(struct scene *scn, struct scene_obj *obj, int key,
                                               sibling)) {
                        obj = list_entry(obj->sibling.prev,
                                         struct scene_obj, sibling);
-                       if (obj->type == SCENEOBJT_MENU) {
+                       if (scene_obj_can_highlight(obj)) {
                                event->type = EXPOACT_POINT_OBJ;
                                event->select.id = obj->id;
                                log_debug("up to obj %d\n", event->select.id);
@@ -528,7 +528,7 @@ static void send_key_obj(struct scene *scn, struct scene_obj *obj, int key,
                while (!list_is_last(&obj->sibling, &scn->obj_head)) {
                        obj = list_entry(obj->sibling.next, struct scene_obj,
                                         sibling);
-                       if (obj->type == SCENEOBJT_MENU) {
+                       if (scene_obj_can_highlight(obj)) {
                                event->type = EXPOACT_POINT_OBJ;
                                event->select.id = obj->id;
                                log_debug("down to obj %d\n", event->select.id);
@@ -537,7 +537,7 @@ static void send_key_obj(struct scene *scn, struct scene_obj *obj, int key,
                }
                break;
        case BKEY_SELECT:
-               if (obj->type == SCENEOBJT_MENU) {
+               if (scene_obj_can_highlight(obj)) {
                        event->type = EXPOACT_OPEN;
                        event->select.id = obj->id;
                        log_debug("open obj %d\n", event->select.id);
@@ -685,12 +685,9 @@ void scene_highlight_first(struct scene *scn)
        struct scene_obj *obj;
 
        list_for_each_entry(obj, &scn->obj_head, sibling) {
-               switch (obj->type) {
-               case SCENEOBJT_MENU:
+               if (scene_obj_can_highlight(obj)) {
                        scene_set_highlight_id(scn, obj->id);
                        return;
-               default:
-                       break;
                }
        }
 }
index 5b21110cde375afb5982cfe1bf9678728316df19..c16b3dd61b09e435d9abbb0c6b81f7b4ea98b17b 100644 (file)
@@ -146,6 +146,8 @@ enum scene_obj_t {
        SCENEOBJT_NONE          = 0,
        SCENEOBJT_IMAGE,
        SCENEOBJT_TEXT,
+
+       /* types from here on can be highlighted */
        SCENEOBJT_MENU,
 };
 
@@ -203,6 +205,12 @@ struct scene_obj {
        struct list_head sibling;
 };
 
+/* object can be highlighted when moving around expo */
+static inline bool scene_obj_can_highlight(const struct scene_obj *obj)
+{
+       return obj->type >= SCENEOBJT_MENU;
+}
+
 /**
  * struct scene_obj_img - information about an image object in a scene
  *