Changeset 344f8b9 in mainline for uspace/lib/ui/src/menubar.c
- Timestamp:
- 2021-05-20T15:34:03Z (4 years ago)
- Children:
- f2416ec3
- Parents:
- da15002
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/menubar.c
rda15002 r344f8b9 72 72 /** Create new menu bar. 73 73 * 74 * @param ui UI 74 75 * @param res UI resource 75 76 * @param rmbar Place to store pointer to new menu bar 76 77 * @return EOK on success, ENOMEM if out of memory 77 78 */ 78 errno_t ui_menu_bar_create(ui_resource_t *res, ui_menu_bar_t **rmbar) 79 errno_t ui_menu_bar_create(ui_t *ui, ui_resource_t *res, 80 ui_menu_bar_t **rmbar) 79 81 { 80 82 ui_menu_bar_t *mbar; … … 91 93 } 92 94 95 mbar->ui = ui; 93 96 mbar->res = res; 94 97 list_initialize(&mbar->menus); … … 232 235 * 233 236 * @param mbar Menu bar 234 * @param pos Position (top-left corner) of menu bar entry237 * @param rect Menu bar entry rectangle 235 238 * @param menu Menu to select (or deselect if selected) or @c NULL 236 239 */ 237 void ui_menu_bar_select(ui_menu_bar_t *mbar, gfx_ coord2_t *pos,240 void ui_menu_bar_select(ui_menu_bar_t *mbar, gfx_rect_t *rect, 238 241 ui_menu_t *menu) 239 242 { 240 gfx_coord2_t spos;241 243 ui_menu_t *old_menu; 242 244 … … 248 250 mbar->selected = NULL; 249 251 250 /* Need to clear the menu has just been closed*/252 /* Close previously open menu */ 251 253 if (old_menu != NULL) 252 (void) ui_menu_ unpaint(old_menu);254 (void) ui_menu_close(old_menu); 253 255 254 256 (void) ui_menu_bar_paint(mbar); 255 257 256 258 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); 265 260 } 266 261 } … … 275 270 { 276 271 gfx_coord2_t pos; 277 gfx_coord2_t spos;278 272 gfx_rect_t rect; 279 273 ui_menu_t *menu; … … 282 276 gfx_coord_t hpad; 283 277 gfx_coord2_t ppos; 284 ui_evclaim_t claimed;285 278 286 279 ppos.x = event->hpos; … … 307 300 if (event->type == POS_PRESS && 308 301 gfx_pix_inside_rect(&ppos, &rect)) { 309 ui_menu_bar_select(mbar, & pos, menu);302 ui_menu_bar_select(mbar, &rect, menu); 310 303 return ui_claimed; 311 304 } 312 305 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 325 306 pos.x += width; 326 307 menu = ui_menu_next(menu); … … 336 317 void ui_menu_bar_unfocus(ui_menu_bar_t *mbar) 337 318 { 338 ui_menu_bar_select(mbar, NULL, NULL);319 // ui_menu_bar_select(mbar, NULL, NULL); 339 320 } 340 321
Note:
See TracChangeset
for help on using the changeset viewer.