Changeset 3c8c580 in mainline for uspace/lib/ui/src
- Timestamp:
- 2021-06-10T13:22:33Z (4 years ago)
- 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)
- Location:
- uspace/lib/ui/src
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/menu.c
rd091007 r3c8c580 45 45 #include <ui/control.h> 46 46 #include <ui/paint.h> 47 #include <ui/popup.h> 47 48 #include <ui/menu.h> 48 49 #include <ui/menuentry.h> … … 59 60 }; 60 61 62 static void ui_menu_popup_pos(ui_popup_t *, void *, pos_event_t *); 63 64 static ui_popup_cb_t ui_menu_popup_cb = { 65 .pos = ui_menu_popup_pos 66 }; 67 61 68 /** Create new menu. 62 69 * … … 203 210 } 204 211 212 /** Get UI resource from menu. 213 * 214 * @param menu Menu 215 * @return UI resource 216 */ 217 ui_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 */ 227 errno_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(¶ms); 242 params.rect = geom.outer_rect; 243 244 rc = ui_popup_create(menu->mbar->ui, ¶ms, &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 */ 258 void ui_menu_close(ui_menu_t *menu) 259 { 260 ui_popup_destroy(menu->popup); 261 menu->popup = NULL; 262 } 263 205 264 /** Paint menu. 206 265 * … … 218 277 errno_t rc; 219 278 220 res = menu->mbar->res;279 res = ui_menu_get_res(menu); 221 280 ui_menu_get_geom(menu, spos, &geom); 222 281 … … 261 320 error: 262 321 return rc; 263 }264 265 /** Unpaint menu.266 *267 * @param menu Menu268 * @return EOK on success or an error code269 */270 errno_t ui_menu_unpaint(ui_menu_t *menu)271 {272 ui_resource_expose(menu->mbar->res);273 return EOK;274 322 } 275 323 … … 312 360 } else { 313 361 /* 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); 316 364 } 317 365 … … 319 367 } 320 368 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 */ 375 static 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 321 385 /** @} 322 386 */ -
uspace/lib/ui/src/menubar.c
rd091007 r3c8c580 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 -
uspace/lib/ui/src/menuentry.c
rd091007 r3c8c580 203 203 ui_resource_t *res; 204 204 205 /* 206 * This needs to work even if the menu is not open, so we cannot 207 * use the menu's resource, which is only created after the menu 208 * is open (and its window is created). Use the menu bar's 209 * resource instead. 210 */ 205 211 res = mentry->menu->mbar->res; 206 212 … … 223 229 gfx_coord_t width; 224 230 231 /* 232 * This needs to work even if the menu is not open, so we cannot 233 * use the menu's resource, which is only created after the menu 234 * is open (and its window is created). Use the menu bar's 235 * resource instead. 236 */ 225 237 res = menu->mbar->res; 226 238 … … 256 268 gfx_coord_t vpad; 257 269 270 /* 271 * This needs to work even if the menu is not open, so we cannot 272 * use the menu's resource, which is only created after the menu 273 * is open (and its window is created). Use the menu bar's 274 * resource instead. 275 */ 258 276 res = mentry->menu->mbar->res; 259 277 … … 294 312 errno_t rc; 295 313 296 res = mentry->menu->mbar->res;314 res = ui_menu_get_res(mentry->menu); 297 315 298 316 ui_menu_entry_get_geom(mentry, pos, &geom); … … 379 397 if (mentry->inside) { 380 398 /* Close menu */ 381 ui_menu_bar_select(mentry->menu->mbar, 382 &mentry->menu->mbar->sel_pos, NULL); 399 ui_menu_bar_select(mentry->menu->mbar, NULL, NULL); 383 400 384 401 /* Call back */ … … 487 504 gfx_coord_t width; 488 505 489 res = mentry->menu->mbar->res;506 res = ui_menu_get_res(mentry->menu); 490 507 491 508 if (res->textmode) { -
uspace/lib/ui/src/window.c
rd091007 r3c8c580 336 336 * is added, the results are undefined. 337 337 * 338 * @param fixed Fixed layout338 * @param window Window 339 339 * @param control Control 340 340 * @return EOK on success, ENOMEM if out of memory … … 509 509 * 510 510 * @param window Window 511 * @param cb Window decorationcallbacks511 * @param cb Window callbacks 512 512 * @param arg Callback argument 513 513 */
Note:
See TracChangeset
for help on using the changeset viewer.