Changes in uspace/lib/ui/src/resource.c [03145ee:ef4d684] in mainline
- File:
-
- 1 edited
-
uspace/lib/ui/src/resource.c (modified) (20 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/resource.c
r03145ee ref4d684 1 1 /* 2 * Copyright (c) 202 0Jiri Svoboda2 * Copyright (c) 2023 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 47 47 static const char *ui_typeface_path = "/data/font/helena.tpf"; 48 48 49 /** Create new UI resource .49 /** Create new UI resource in graphics mode. 50 50 * 51 51 * @param gc Graphic context … … 53 53 * @return EOK on success, ENOMEM if out of memory 54 54 */ 55 errno_t ui_resource_create(gfx_context_t *gc, ui_resource_t **rresource) 55 static errno_t ui_resource_create_gfx(gfx_context_t *gc, 56 ui_resource_t **rresource) 56 57 { 57 58 ui_resource_t *resource; … … 61 62 gfx_color_t *btn_frame_color = NULL; 62 63 gfx_color_t *btn_face_color = NULL; 64 gfx_color_t *btn_face_lit_color = NULL; 63 65 gfx_color_t *btn_text_color = NULL; 64 66 gfx_color_t *btn_highlight_color = NULL; … … 66 68 gfx_color_t *wnd_face_color = NULL; 67 69 gfx_color_t *wnd_text_color = NULL; 70 gfx_color_t *wnd_dis_text_color = NULL; 71 gfx_color_t *wnd_text_hgl_color = NULL; 72 gfx_color_t *wnd_sel_text_color = NULL; 73 gfx_color_t *wnd_sel_text_hgl_color = NULL; 74 gfx_color_t *wnd_sel_text_bg_color = NULL; 68 75 gfx_color_t *wnd_frame_hi_color = NULL; 69 76 gfx_color_t *wnd_frame_sh_color = NULL; … … 76 83 gfx_color_t *entry_fg_color = NULL; 77 84 gfx_color_t *entry_bg_color = NULL; 85 gfx_color_t *entry_act_bg_color = NULL; 86 gfx_color_t *entry_sel_text_fg_color = NULL; 87 gfx_color_t *entry_sel_text_bg_color = NULL; 88 gfx_color_t *sbar_trough_color = NULL; 89 gfx_color_t *sbar_act_trough_color = NULL; 78 90 errno_t rc; 79 91 … … 104 116 goto error; 105 117 118 rc = gfx_color_new_rgb_i16(0xe8e8, 0xe8e8, 0xe8e8, &btn_face_lit_color); 119 if (rc != EOK) 120 goto error; 121 106 122 rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_text_color); 107 123 if (rc != EOK) … … 125 141 goto error; 126 142 143 rc = gfx_color_new_rgb_i16(0x9696, 0x9696, 0x9696, &wnd_dis_text_color); 144 if (rc != EOK) 145 goto error; 146 147 rc = gfx_color_new_rgb_i16(0, 0, 0, &wnd_text_hgl_color); 148 if (rc != EOK) 149 goto error; 150 151 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &wnd_sel_text_color); 152 if (rc != EOK) 153 goto error; 154 155 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, 156 &wnd_sel_text_hgl_color); 157 if (rc != EOK) 158 goto error; 159 160 rc = gfx_color_new_rgb_i16(0x5858, 0x6a6a, 0xc4c4, 161 &wnd_sel_text_bg_color); 162 if (rc != EOK) 163 goto error; 164 127 165 rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_frame_hi_color); 128 166 if (rc != EOK) 129 167 goto error; 130 168 131 rc = gfx_color_new_rgb_i16(0 , 0, 0, &wnd_frame_sh_color);169 rc = gfx_color_new_rgb_i16(0x4444, 0x4444, 0x4444, &wnd_frame_sh_color); 132 170 if (rc != EOK) 133 171 goto error; … … 166 204 167 205 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &entry_bg_color); 206 if (rc != EOK) 207 goto error; 208 209 rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &entry_act_bg_color); 210 if (rc != EOK) 211 goto error; 212 213 rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, 214 &entry_sel_text_fg_color); 215 if (rc != EOK) 216 goto error; 217 218 rc = gfx_color_new_rgb_i16(0, 0, 0xffff, &entry_sel_text_bg_color); 219 if (rc != EOK) 220 goto error; 221 222 rc = gfx_color_new_rgb_i16(0xe4e4, 0xe4e4, 0xe4e4, 223 &sbar_trough_color); 224 if (rc != EOK) 225 goto error; 226 227 rc = gfx_color_new_rgb_i16(0x5858, 0x5858, 0x5858, 228 &sbar_act_trough_color); 168 229 if (rc != EOK) 169 230 goto error; … … 172 233 resource->tface = tface; 173 234 resource->font = font; 235 resource->textmode = false; 174 236 175 237 resource->btn_frame_color = btn_frame_color; 176 238 resource->btn_face_color = btn_face_color; 239 resource->btn_face_lit_color = btn_face_lit_color; 177 240 resource->btn_text_color = btn_text_color; 178 241 resource->btn_highlight_color = btn_highlight_color; … … 181 244 resource->wnd_face_color = wnd_face_color; 182 245 resource->wnd_text_color = wnd_text_color; 246 resource->wnd_dis_text_color = wnd_dis_text_color; 247 resource->wnd_text_hgl_color = wnd_text_hgl_color; 248 resource->wnd_sel_text_color = wnd_sel_text_color; 249 resource->wnd_sel_text_hgl_color = wnd_sel_text_hgl_color; 250 resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color; 183 251 resource->wnd_frame_hi_color = wnd_frame_hi_color; 184 252 resource->wnd_frame_sh_color = wnd_frame_sh_color; … … 193 261 resource->entry_fg_color = entry_fg_color; 194 262 resource->entry_bg_color = entry_bg_color; 263 resource->entry_act_bg_color = entry_act_bg_color; 264 resource->entry_sel_text_fg_color = entry_sel_text_fg_color; 265 resource->entry_sel_text_bg_color = entry_sel_text_bg_color; 266 267 resource->sbar_trough_color = sbar_trough_color; 268 resource->sbar_act_trough_color = sbar_act_trough_color; 195 269 196 270 *rresource = resource; … … 201 275 if (btn_face_color != NULL) 202 276 gfx_color_delete(btn_face_color); 277 if (btn_face_lit_color != NULL) 278 gfx_color_delete(btn_face_lit_color); 203 279 if (btn_text_color != NULL) 204 280 gfx_color_delete(btn_text_color); … … 212 288 if (wnd_text_color != NULL) 213 289 gfx_color_delete(wnd_text_color); 290 if (wnd_dis_text_color != NULL) 291 gfx_color_delete(wnd_dis_text_color); 292 if (wnd_text_hgl_color != NULL) 293 gfx_color_delete(wnd_text_hgl_color); 294 if (wnd_sel_text_color != NULL) 295 gfx_color_delete(wnd_sel_text_color); 296 if (wnd_sel_text_hgl_color != NULL) 297 gfx_color_delete(wnd_sel_text_hgl_color); 298 if (wnd_sel_text_bg_color != NULL) 299 gfx_color_delete(wnd_sel_text_bg_color); 214 300 if (wnd_frame_hi_color != NULL) 215 301 gfx_color_delete(wnd_frame_hi_color); … … 234 320 if (entry_bg_color != NULL) 235 321 gfx_color_delete(entry_bg_color); 322 if (entry_sel_text_fg_color != NULL) 323 gfx_color_delete(entry_sel_text_fg_color); 324 if (entry_sel_text_bg_color != NULL) 325 gfx_color_delete(entry_sel_text_bg_color); 326 if (entry_act_bg_color != NULL) 327 gfx_color_delete(entry_act_bg_color); 328 329 if (sbar_trough_color != NULL) 330 gfx_color_delete(sbar_trough_color); 331 if (sbar_act_trough_color != NULL) 332 gfx_color_delete(sbar_act_trough_color); 236 333 237 334 if (tface != NULL) … … 241 338 } 242 339 340 /** Create new UI resource in text mode. 341 * 342 * @param gc Graphic context 343 * @param rresource Place to store pointer to new UI resource 344 * @return EOK on success, ENOMEM if out of memory 345 */ 346 static errno_t ui_resource_create_text(gfx_context_t *gc, 347 ui_resource_t **rresource) 348 { 349 ui_resource_t *resource; 350 gfx_typeface_t *tface = NULL; 351 gfx_font_t *font = NULL; 352 gfx_color_t *btn_frame_color = NULL; 353 gfx_color_t *btn_face_color = NULL; 354 gfx_color_t *btn_face_lit_color = NULL; 355 gfx_color_t *btn_text_color = NULL; 356 gfx_color_t *btn_highlight_color = NULL; 357 gfx_color_t *btn_shadow_color = NULL; 358 gfx_color_t *wnd_face_color = NULL; 359 gfx_color_t *wnd_text_color = NULL; 360 gfx_color_t *wnd_dis_text_color = NULL; 361 gfx_color_t *wnd_text_hgl_color = NULL; 362 gfx_color_t *wnd_sel_text_color = NULL; 363 gfx_color_t *wnd_sel_text_hgl_color = NULL; 364 gfx_color_t *wnd_sel_text_bg_color = NULL; 365 gfx_color_t *wnd_frame_hi_color = NULL; 366 gfx_color_t *wnd_frame_sh_color = NULL; 367 gfx_color_t *wnd_highlight_color = NULL; 368 gfx_color_t *wnd_shadow_color = NULL; 369 gfx_color_t *tbar_act_bg_color = NULL; 370 gfx_color_t *tbar_inact_bg_color = NULL; 371 gfx_color_t *tbar_act_text_color = NULL; 372 gfx_color_t *tbar_inact_text_color = NULL; 373 gfx_color_t *entry_fg_color = NULL; 374 gfx_color_t *entry_bg_color = NULL; 375 gfx_color_t *entry_sel_text_fg_color = NULL; 376 gfx_color_t *entry_sel_text_bg_color = NULL; 377 gfx_color_t *entry_act_bg_color = NULL; 378 gfx_color_t *sbar_trough_color = NULL; 379 gfx_color_t *sbar_act_trough_color = NULL; 380 errno_t rc; 381 382 resource = calloc(1, sizeof(ui_resource_t)); 383 if (resource == NULL) 384 return ENOMEM; 385 386 /* Create dummy font for text mode */ 387 rc = gfx_typeface_create(gc, &tface); 388 if (rc != EOK) 389 goto error; 390 391 rc = gfx_font_create_textmode(tface, &font); 392 if (rc != EOK) 393 goto error; 394 395 rc = gfx_color_new_ega(0x07, &btn_frame_color); 396 if (rc != EOK) 397 goto error; 398 399 rc = gfx_color_new_ega(0x20, &btn_face_color); 400 if (rc != EOK) 401 goto error; 402 403 rc = gfx_color_new_ega(0x30, &btn_face_lit_color); 404 if (rc != EOK) 405 goto error; 406 407 rc = gfx_color_new_ega(0x20, &btn_text_color); 408 if (rc != EOK) 409 goto error; 410 411 rc = gfx_color_new_ega(0x20, &btn_highlight_color); 412 if (rc != EOK) 413 goto error; 414 415 rc = gfx_color_new_ega(0x01, &btn_shadow_color); 416 if (rc != EOK) 417 goto error; 418 419 rc = gfx_color_new_ega(0x70, &wnd_face_color); 420 if (rc != EOK) 421 goto error; 422 423 rc = gfx_color_new_ega(0x70, &wnd_text_color); 424 if (rc != EOK) 425 goto error; 426 427 rc = gfx_color_new_ega(0x78, &wnd_dis_text_color); 428 if (rc != EOK) 429 goto error; 430 431 rc = gfx_color_new_ega(0x74, &wnd_text_hgl_color); 432 if (rc != EOK) 433 goto error; 434 435 rc = gfx_color_new_ega(0x07, &wnd_sel_text_color); 436 if (rc != EOK) 437 goto error; 438 439 rc = gfx_color_new_ega(0x04, &wnd_sel_text_hgl_color); 440 if (rc != EOK) 441 goto error; 442 443 rc = gfx_color_new_ega(0x07, &wnd_sel_text_bg_color); 444 if (rc != EOK) 445 goto error; 446 447 rc = gfx_color_new_ega(0x70, &wnd_frame_hi_color); 448 if (rc != EOK) 449 goto error; 450 451 rc = gfx_color_new_ega(0x01, &wnd_frame_sh_color); 452 if (rc != EOK) 453 goto error; 454 455 rc = gfx_color_new_ega(0x70, &wnd_highlight_color); 456 if (rc != EOK) 457 goto error; 458 459 rc = gfx_color_new_ega(0x01, &wnd_shadow_color); 460 if (rc != EOK) 461 goto error; 462 463 rc = gfx_color_new_ega(0x70, &tbar_act_bg_color); 464 if (rc != EOK) 465 goto error; 466 467 rc = gfx_color_new_ega(0x70, &tbar_act_text_color); 468 if (rc != EOK) 469 goto error; 470 471 rc = gfx_color_new_ega(0x07, &tbar_inact_bg_color); 472 if (rc != EOK) 473 goto error; 474 475 rc = gfx_color_new_ega(0x07, &tbar_inact_text_color); 476 if (rc != EOK) 477 goto error; 478 479 rc = gfx_color_new_ega(0x07, &entry_fg_color); 480 if (rc != EOK) 481 goto error; 482 483 rc = gfx_color_new_ega(0x07, &entry_bg_color); 484 if (rc != EOK) 485 goto error; 486 487 rc = gfx_color_new_ega(0x1e, &entry_sel_text_fg_color); 488 if (rc != EOK) 489 goto error; 490 491 rc = gfx_color_new_ega(0x1e, &entry_sel_text_bg_color); 492 if (rc != EOK) 493 goto error; 494 495 rc = gfx_color_new_ega(0x37, &entry_act_bg_color); 496 if (rc != EOK) 497 goto error; 498 499 rc = gfx_color_new_ega(0x07, &sbar_trough_color); 500 if (rc != EOK) 501 goto error; 502 503 rc = gfx_color_new_ega(0x07, &sbar_act_trough_color); 504 if (rc != EOK) 505 goto error; 506 507 resource->gc = gc; 508 resource->tface = tface; 509 resource->font = font; 510 resource->textmode = true; 511 512 resource->btn_frame_color = btn_frame_color; 513 resource->btn_face_color = btn_face_color; 514 resource->btn_face_lit_color = btn_face_lit_color; 515 resource->btn_text_color = btn_text_color; 516 resource->btn_highlight_color = btn_highlight_color; 517 resource->btn_shadow_color = btn_shadow_color; 518 519 resource->wnd_face_color = wnd_face_color; 520 resource->wnd_text_color = wnd_text_color; 521 resource->wnd_dis_text_color = wnd_dis_text_color; 522 resource->wnd_text_hgl_color = wnd_text_hgl_color; 523 resource->wnd_sel_text_color = wnd_sel_text_color; 524 resource->wnd_sel_text_hgl_color = wnd_sel_text_hgl_color; 525 resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color; 526 resource->wnd_frame_hi_color = wnd_frame_hi_color; 527 resource->wnd_frame_sh_color = wnd_frame_sh_color; 528 resource->wnd_highlight_color = wnd_highlight_color; 529 resource->wnd_shadow_color = wnd_shadow_color; 530 531 resource->tbar_act_bg_color = tbar_act_bg_color; 532 resource->tbar_act_text_color = tbar_act_text_color; 533 resource->tbar_inact_bg_color = tbar_inact_bg_color; 534 resource->tbar_inact_text_color = tbar_inact_text_color; 535 536 resource->entry_fg_color = entry_fg_color; 537 resource->entry_bg_color = entry_bg_color; 538 resource->entry_act_bg_color = entry_act_bg_color; 539 resource->entry_sel_text_fg_color = entry_sel_text_fg_color; 540 resource->entry_sel_text_bg_color = entry_sel_text_bg_color; 541 542 resource->sbar_trough_color = sbar_trough_color; 543 resource->sbar_act_trough_color = sbar_act_trough_color; 544 545 *rresource = resource; 546 return EOK; 547 error: 548 if (btn_frame_color != NULL) 549 gfx_color_delete(btn_frame_color); 550 if (btn_face_color != NULL) 551 gfx_color_delete(btn_face_color); 552 if (btn_face_lit_color != NULL) 553 gfx_color_delete(btn_face_lit_color); 554 if (btn_text_color != NULL) 555 gfx_color_delete(btn_text_color); 556 if (btn_highlight_color != NULL) 557 gfx_color_delete(btn_highlight_color); 558 if (btn_shadow_color != NULL) 559 gfx_color_delete(btn_shadow_color); 560 561 if (wnd_face_color != NULL) 562 gfx_color_delete(wnd_face_color); 563 if (wnd_text_color != NULL) 564 gfx_color_delete(wnd_text_color); 565 if (wnd_dis_text_color != NULL) 566 gfx_color_delete(wnd_dis_text_color); 567 if (wnd_text_hgl_color != NULL) 568 gfx_color_delete(wnd_text_hgl_color); 569 if (wnd_sel_text_color != NULL) 570 gfx_color_delete(wnd_sel_text_color); 571 if (wnd_sel_text_hgl_color != NULL) 572 gfx_color_delete(wnd_sel_text_hgl_color); 573 if (wnd_sel_text_bg_color != NULL) 574 gfx_color_delete(wnd_sel_text_bg_color); 575 if (wnd_frame_hi_color != NULL) 576 gfx_color_delete(wnd_frame_hi_color); 577 if (wnd_frame_sh_color != NULL) 578 gfx_color_delete(wnd_frame_sh_color); 579 if (wnd_highlight_color != NULL) 580 gfx_color_delete(wnd_highlight_color); 581 if (wnd_shadow_color != NULL) 582 gfx_color_delete(wnd_shadow_color); 583 584 if (tbar_act_bg_color != NULL) 585 gfx_color_delete(tbar_act_bg_color); 586 if (tbar_act_text_color != NULL) 587 gfx_color_delete(tbar_act_text_color); 588 if (tbar_inact_bg_color != NULL) 589 gfx_color_delete(tbar_inact_bg_color); 590 if (tbar_inact_text_color != NULL) 591 gfx_color_delete(tbar_inact_text_color); 592 593 if (entry_fg_color != NULL) 594 gfx_color_delete(entry_fg_color); 595 if (entry_bg_color != NULL) 596 gfx_color_delete(entry_bg_color); 597 if (entry_act_bg_color != NULL) 598 gfx_color_delete(entry_act_bg_color); 599 if (entry_sel_text_fg_color != NULL) 600 gfx_color_delete(entry_sel_text_fg_color); 601 if (entry_sel_text_bg_color != NULL) 602 gfx_color_delete(entry_sel_text_bg_color); 603 if (sbar_trough_color != NULL) 604 gfx_color_delete(sbar_trough_color); 605 if (sbar_act_trough_color != NULL) 606 gfx_color_delete(sbar_act_trough_color); 607 608 if (tface != NULL) 609 gfx_typeface_destroy(tface); 610 free(resource); 611 return rc; 612 } 613 614 /** Create new UI resource. 615 * 616 * @param gc Graphic context 617 * @param textmode @c true if running in text mode 618 * @param rresource Place to store pointer to new UI resource 619 * @return EOK on success, ENOMEM if out of memory 620 */ 621 errno_t ui_resource_create(gfx_context_t *gc, bool textmode, 622 ui_resource_t **rresource) 623 { 624 if (textmode) 625 return ui_resource_create_text(gc, rresource); 626 else 627 return ui_resource_create_gfx(gc, rresource); 628 } 629 243 630 /** Destroy UI resource. 244 631 * … … 252 639 gfx_color_delete(resource->btn_frame_color); 253 640 gfx_color_delete(resource->btn_face_color); 641 gfx_color_delete(resource->btn_face_lit_color); 254 642 gfx_color_delete(resource->btn_text_color); 255 643 gfx_color_delete(resource->btn_highlight_color); … … 258 646 gfx_color_delete(resource->wnd_face_color); 259 647 gfx_color_delete(resource->wnd_text_color); 648 gfx_color_delete(resource->wnd_dis_text_color); 649 gfx_color_delete(resource->wnd_sel_text_color); 650 gfx_color_delete(resource->wnd_sel_text_bg_color); 260 651 gfx_color_delete(resource->wnd_frame_hi_color); 261 652 gfx_color_delete(resource->wnd_frame_sh_color); … … 270 661 gfx_color_delete(resource->entry_fg_color); 271 662 gfx_color_delete(resource->entry_bg_color); 663 gfx_color_delete(resource->entry_act_bg_color); 664 gfx_color_delete(resource->entry_sel_text_fg_color); 665 gfx_color_delete(resource->entry_sel_text_bg_color); 666 667 gfx_color_delete(resource->sbar_trough_color); 668 gfx_color_delete(resource->sbar_act_trough_color); 272 669 273 670 gfx_font_close(resource->font); … … 276 673 } 277 674 675 /** Set UI resource expose callback. 676 * 677 * @param resource Resource 678 * @param cb Callback 679 * @param arg Callback argument 680 */ 681 void ui_resource_set_expose_cb(ui_resource_t *resource, 682 ui_expose_cb_t cb, void *arg) 683 { 684 resource->expose_cb = cb; 685 resource->expose_arg = arg; 686 } 687 688 /** Force UI repaint after an area has been exposed. 689 * 690 * This is called when a popup disappears, which could have exposed some 691 * other UI elements. It causes complete repaint of the UI. 692 * 693 * NOTE Ideally we could specify the exposed rectangle and then limit 694 * the repaint to just that. That would, however, require means of 695 * actually clipping the repaint operation. 696 */ 697 void ui_resource_expose(ui_resource_t *resource) 698 { 699 if (resource->expose_cb != NULL) 700 resource->expose_cb(resource->expose_arg); 701 } 702 703 /** Get the UI font. 704 * 705 * @param resource UI resource 706 * @return UI font 707 */ 708 gfx_font_t *ui_resource_get_font(ui_resource_t *resource) 709 { 710 return resource->font; 711 } 712 713 /** Determine if resource is textmode. 714 * 715 * @param resource UI resource 716 * @return @c true iff resource is textmode 717 */ 718 bool ui_resource_is_textmode(ui_resource_t *resource) 719 { 720 return resource->textmode; 721 } 722 723 /** Get the UI window face color. 724 * 725 * @param resource UI resource 726 * @return UI window face color 727 */ 728 gfx_color_t *ui_resource_get_wnd_face_color(ui_resource_t *resource) 729 { 730 return resource->wnd_face_color; 731 } 732 733 /** Get the UI window text color. 734 * 735 * @param resource UI resource 736 * @return UI window text color 737 */ 738 gfx_color_t *ui_resource_get_wnd_text_color(ui_resource_t *resource) 739 { 740 return resource->wnd_text_color; 741 } 742 278 743 /** @} 279 744 */
Note:
See TracChangeset
for help on using the changeset viewer.
