Changeset 3c8c580 in mainline for uspace/lib/ui/src/menu.c


Ignore:
Timestamp:
2021-06-10T13:22:33Z (3 years ago)
Author:
jxsvoboda <5887334+jxsvoboda@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c68c18b9
Parents:
d091007
git-author:
Jiri Svoboda <jiri@…> (2021-05-20 15:34:03)
git-committer:
jxsvoboda <5887334+jxsvoboda@…> (2021-06-10 13:22:33)
Message:

Open menu in separate popup window (WIP)

File:
1 edited

Legend:

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

    rd091007 r3c8c580  
    4545#include <ui/control.h>
    4646#include <ui/paint.h>
     47#include <ui/popup.h>
    4748#include <ui/menu.h>
    4849#include <ui/menuentry.h>
     
    5960};
    6061
     62static void ui_menu_popup_pos(ui_popup_t *, void *, pos_event_t *);
     63
     64static ui_popup_cb_t ui_menu_popup_cb = {
     65        .pos = ui_menu_popup_pos
     66};
     67
    6168/** Create new menu.
    6269 *
     
    203210}
    204211
     212/** Get UI resource from menu.
     213 *
     214 * @param menu Menu
     215 * @return UI resource
     216 */
     217ui_resource_t *ui_menu_get_res(ui_menu_t *menu)
     218{
     219        return ui_popup_get_res(menu->popup);
     220}
     221
     222/** Open menu.
     223 *
     224 * @param menu Menu
     225 * @param prect Parent rectangle around which the menu should be placed
     226 */
     227errno_t ui_menu_open(ui_menu_t *menu, gfx_rect_t *prect)
     228{
     229        ui_popup_t *popup = NULL;
     230        ui_popup_params_t params;
     231        ui_menu_geom_t geom;
     232        gfx_coord2_t mpos;
     233        errno_t rc;
     234
     235        /* Determine menu dimensions */
     236
     237        mpos.x = 0;
     238        mpos.y = 0;
     239        ui_menu_get_geom(menu, &mpos, &geom);
     240
     241        ui_popup_params_init(&params);
     242        params.rect = geom.outer_rect;
     243
     244        rc = ui_popup_create(menu->mbar->ui, &params, &popup);
     245        if (rc != EOK)
     246                return rc;
     247
     248        menu->popup = popup;
     249        ui_popup_set_cb(popup, &ui_menu_popup_cb, menu);
     250
     251        return ui_menu_paint(menu, &mpos);
     252}
     253
     254/** Close menu.
     255 *
     256 * @param menu Menu
     257 */
     258void ui_menu_close(ui_menu_t *menu)
     259{
     260        ui_popup_destroy(menu->popup);
     261        menu->popup = NULL;
     262}
     263
    205264/** Paint menu.
    206265 *
     
    218277        errno_t rc;
    219278
    220         res = menu->mbar->res;
     279        res = ui_menu_get_res(menu);
    221280        ui_menu_get_geom(menu, spos, &geom);
    222281
     
    261320error:
    262321        return rc;
    263 }
    264 
    265 /** Unpaint menu.
    266  *
    267  * @param menu Menu
    268  * @return EOK on success or an error code
    269  */
    270 errno_t ui_menu_unpaint(ui_menu_t *menu)
    271 {
    272         ui_resource_expose(menu->mbar->res);
    273         return EOK;
    274322}
    275323
     
    312360        } else {
    313361                /* Press outside menu - close it */
    314                 if (event->type == POS_PRESS)
    315                         ui_menu_bar_select(menu->mbar, NULL, NULL);
     362//              if (event->type == POS_PRESS)
     363//                      ui_menu_bar_select(menu->mbar, NULL, NULL);
    316364        }
    317365
     
    319367}
    320368
     369/** Handle position event in menu popup window.
     370 *
     371 * @param popup Menu popup window
     372 * @param arg Argument (ui_menu_t *)
     373 * @param event Position event
     374 */
     375static void ui_menu_popup_pos(ui_popup_t *popup, void *arg, pos_event_t *event)
     376{
     377        ui_menu_t *menu = (ui_menu_t *)arg;
     378        gfx_coord2_t spos;
     379
     380        spos.x = 0;
     381        spos.y = 0;
     382        ui_menu_pos_event(menu, &spos, event);
     383}
     384
    321385/** @}
    322386 */
Note: See TracChangeset for help on using the changeset viewer.