Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset f251883 in mainline


Ignore:
Timestamp:
2021-04-09T22:41:22Z (6 months ago)
Author:
jxsvoboda <5887334+jxsvoboda@…>
Branches:
master
Children:
f536a16
Parents:
62223ec
git-author:
Jiri Svoboda <jiri@…> (2021-04-01 21:31:24)
git-committer:
jxsvoboda <5887334+jxsvoboda@…> (2021-04-09 22:41:22)
Message:

Menu entries need to stretch to the width of the menu

Location:
uspace/lib/ui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/private/menu.h

    r62223ec rf251883  
    5656        /** Selected menu entry or @c NULL */
    5757        struct ui_menu_entry *selected;
     58        /** Maximum entry width */
     59        gfx_coord_t max_w;
     60        /** Total entry height */
     61        gfx_coord_t total_h;
    5862        /** Menu entries (ui_menu_entry_t) */
    5963        list_t entries;
  • uspace/lib/ui/src/menu.c

    r62223ec rf251883  
    163163    ui_menu_geom_t *geom)
    164164{
    165         ui_menu_entry_t *mentry;
    166165        gfx_coord2_t edim;
    167166        gfx_coord_t frame_w;
    168167        gfx_coord_t frame_h;
    169         gfx_coord_t w;
    170         gfx_coord_t h;
    171168
    172169        if (menu->mbar->res->textmode) {
     
    178175        }
    179176
    180         edim.x = 0;
    181         edim.y = 0;
    182 
    183         mentry = ui_menu_entry_first(menu);
    184         while (mentry != NULL) {
    185                 w = ui_menu_entry_width(mentry);
    186                 h = ui_menu_entry_height(mentry);
    187 
    188                 if (w > edim.x)
    189                         edim.x = w;
    190                 edim.y += h;
    191 
    192                 mentry = ui_menu_entry_next(mentry);
    193         }
     177        edim.x = menu->max_w;
     178        edim.y = menu->total_h;
    194179
    195180        geom->outer_rect.p0 = *spos;
  • uspace/lib/ui/src/menuentry.c

    r62223ec rf251883  
    6969{
    7070        ui_menu_entry_t *mentry;
     71        gfx_coord_t width;
    7172
    7273        mentry = calloc(1, sizeof(ui_menu_entry_t));
     
    8283        mentry->menu = menu;
    8384        list_append(&mentry->lentries, &menu->entries);
     85
     86        /* Update accumulated menu entry dimensions */
     87        width = ui_menu_entry_width(mentry);
     88        if (width > menu->max_w)
     89                menu->max_w = width;
     90        menu->total_h += ui_menu_entry_height(mentry);
    8491
    8592        *rmentry = mentry;
     
    372379        gfx_coord_t hpad;
    373380        gfx_coord_t vpad;
    374         const char *caption;
    375381        gfx_coord_t width;
    376382
     
    385391        }
    386392
    387         caption = mentry->caption;
    388         width = gfx_text_width(res->font, caption) + 2 * hpad;
     393        width = mentry->menu->max_w;
    389394        geom->text_pos.x = pos->x + hpad;
    390395        geom->text_pos.y = pos->y + vpad;
Note: See TracChangeset for help on using the changeset viewer.