Changeset cd62879 in mainline for uspace/lib/ui/src/menuentry.c
- Timestamp:
- 2021-04-01T16:23:35Z (4 years ago)
- Children:
- 379cd75f
- Parents:
- bfb055b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/menuentry.c
rbfb055b rcd62879 217 217 caption = mentry->caption; 218 218 219 if (mentry == mentry->menu->selected) { 219 if ((mentry->held && mentry->inside) || 220 mentry == mentry->menu->selected) { 220 221 fmt.color = res->wnd_sel_text_color; 221 222 bg_color = res->wnd_sel_text_bg_color; … … 249 250 * 250 251 * @param mentry Menu entry 251 * @param pos Position (top-left corner) 252 * @param ppos Press position 253 */ 254 void ui_menu_entry_press(ui_menu_entry_t *mentry, gfx_coord2_t *pos, 255 gfx_coord2_t *ppos) 256 { 257 ui_menu_entry_geom_t geom; 258 259 ui_menu_entry_get_geom(mentry, pos, &geom); 260 261 if (gfx_pix_inside_rect(ppos, &geom.outer_rect)) { 262 /* Press inside menu entry */ 263 252 * @param pos Menu entry position 253 */ 254 void ui_menu_entry_press(ui_menu_entry_t *mentry, gfx_coord2_t *pos) 255 { 256 if (mentry->held) 257 return; 258 259 mentry->inside = true; 260 mentry->held = true; 261 ui_menu_entry_paint(mentry, pos); 262 } 263 264 /** Handle button release in menu entry. 265 * 266 * @param mentry Menu entry 267 */ 268 void ui_menu_entry_release(ui_menu_entry_t *mentry) 269 { 270 if (!mentry->held) 271 return; 272 273 mentry->held = false; 274 275 if (mentry->inside) { 264 276 /* Close menu */ 265 277 ui_menu_bar_select(mentry->menu->mbar, … … 270 282 mentry->cb(mentry, mentry->arg); 271 283 } 284 } 285 286 /** Pointer entered menu entry. 287 * 288 * @param mentry Menu entry 289 * @param pos Menu entry position 290 */ 291 void ui_menu_entry_enter(ui_menu_entry_t *mentry, gfx_coord2_t *pos) 292 { 293 if (mentry->inside) 294 return; 295 296 mentry->inside = true; 297 if (mentry->held) 298 (void) ui_menu_entry_paint(mentry, pos); 299 } 300 301 /** Pointer left menu entry. 302 * 303 * @param mentry Menu entry 304 * @param pos Menu entry position 305 */ 306 void ui_menu_entry_leave(ui_menu_entry_t *mentry, gfx_coord2_t *pos) 307 { 308 if (!mentry->inside) 309 return; 310 311 mentry->inside = false; 312 if (mentry->held) 313 (void) ui_menu_entry_paint(mentry, pos); 314 } 315 316 /** Handle menu entry position event. 317 * 318 * @param mentry Menu entry 319 * @param pos Menu entry position (top-left corner) 320 * @param pos_event Position event 321 * @return @c ui_claimed iff the event is claimed 322 */ 323 ui_evclaim_t ui_menu_entry_pos_event(ui_menu_entry_t *mentry, 324 gfx_coord2_t *pos, pos_event_t *event) 325 { 326 ui_menu_entry_geom_t geom; 327 gfx_coord2_t ppos; 328 bool inside; 329 330 ppos.x = event->hpos; 331 ppos.y = event->vpos; 332 333 ui_menu_entry_get_geom(mentry, pos, &geom); 334 inside = gfx_pix_inside_rect(&ppos, &geom.outer_rect); 335 336 switch (event->type) { 337 case POS_PRESS: 338 if (inside) { 339 ui_menu_entry_press(mentry, pos); 340 return ui_claimed; 341 } 342 break; 343 case POS_RELEASE: 344 if (mentry->held) { 345 ui_menu_entry_release(mentry); 346 return ui_claimed; 347 } 348 break; 349 case POS_UPDATE: 350 if (inside && !mentry->inside) { 351 ui_menu_entry_enter(mentry, pos); 352 return ui_claimed; 353 } else if (!inside && mentry->inside) { 354 ui_menu_entry_leave(mentry, pos); 355 } 356 break; 357 } 358 359 return ui_unclaimed; 272 360 } 273 361
Note:
See TracChangeset
for help on using the changeset viewer.