Changeset 344f8b9 in mainline for uspace/lib/ui/src/menubar.c


Ignore:
Timestamp:
2021-05-20T15:34:03Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Children:
f2416ec3
Parents:
da15002
Message:

Open menu in separate popup window (WIP)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/menubar.c

    rda15002 r344f8b9  
    7272/** Create new menu bar.
    7373 *
     74 * @param ui UI
    7475 * @param res UI resource
    7576 * @param rmbar Place to store pointer to new menu bar
    7677 * @return EOK on success, ENOMEM if out of memory
    7778 */
    78 errno_t ui_menu_bar_create(ui_resource_t *res, ui_menu_bar_t **rmbar)
     79errno_t ui_menu_bar_create(ui_t *ui, ui_resource_t *res,
     80    ui_menu_bar_t **rmbar)
    7981{
    8082        ui_menu_bar_t *mbar;
     
    9193        }
    9294
     95        mbar->ui = ui;
    9396        mbar->res = res;
    9497        list_initialize(&mbar->menus);
     
    232235 *
    233236 * @param mbar Menu bar
    234  * @param pos Position (top-left corner) of menu bar entry
     237 * @param rect Menu bar entry rectangle
    235238 * @param menu Menu to select (or deselect if selected) or @c NULL
    236239 */
    237 void ui_menu_bar_select(ui_menu_bar_t *mbar, gfx_coord2_t *pos,
     240void ui_menu_bar_select(ui_menu_bar_t *mbar, gfx_rect_t *rect,
    238241    ui_menu_t *menu)
    239242{
    240         gfx_coord2_t spos;
    241243        ui_menu_t *old_menu;
    242244
     
    248250                mbar->selected = NULL;
    249251
    250         /* Need to clear the menu has just been closed */
     252        /* Close previously open menu */
    251253        if (old_menu != NULL)
    252                 (void) ui_menu_unpaint(old_menu);
     254                (void) ui_menu_close(old_menu);
    253255
    254256        (void) ui_menu_bar_paint(mbar);
    255257
    256258        if (mbar->selected != NULL) {
    257                 /* Cache position of selected entry */
    258                 mbar->sel_pos = *pos;
    259 
    260                 /* Position menu under selected menu bar entry */
    261                 spos.x = pos->x;
    262                 spos.y = mbar->rect.p1.y;
    263 
    264                 (void) ui_menu_paint(mbar->selected, &spos);
     259                (void) ui_menu_open(mbar->selected, rect);
    265260        }
    266261}
     
    275270{
    276271        gfx_coord2_t pos;
    277         gfx_coord2_t spos;
    278272        gfx_rect_t rect;
    279273        ui_menu_t *menu;
     
    282276        gfx_coord_t hpad;
    283277        gfx_coord2_t ppos;
    284         ui_evclaim_t claimed;
    285278
    286279        ppos.x = event->hpos;
     
    307300                if (event->type == POS_PRESS &&
    308301                    gfx_pix_inside_rect(&ppos, &rect)) {
    309                         ui_menu_bar_select(mbar, &pos, menu);
     302                        ui_menu_bar_select(mbar, &rect, menu);
    310303                        return ui_claimed;
    311304                }
    312305
    313                 if (menu == mbar->selected) {
    314                         /* Open menu is positioned below menu bar entry */
    315                         spos.x = pos.x;
    316                         spos.y = mbar->rect.p1.y;
    317 
    318                         ui_menu_get_rect(menu, &spos, &rect);
    319 
    320                         claimed = ui_menu_pos_event(menu, &spos, event);
    321                         if (claimed == ui_claimed)
    322                                 return ui_claimed;
    323                 }
    324 
    325306                pos.x += width;
    326307                menu = ui_menu_next(menu);
     
    336317void ui_menu_bar_unfocus(ui_menu_bar_t *mbar)
    337318{
    338         ui_menu_bar_select(mbar, NULL, NULL);
     319//      ui_menu_bar_select(mbar, NULL, NULL);
    339320}
    340321
Note: See TracChangeset for help on using the changeset viewer.