Ignore:
File:
1 edited

Legend:

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

    r03145ee ref4d684  
    11/*
    2  * Copyright (c) 2020 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4747static const char *ui_typeface_path = "/data/font/helena.tpf";
    4848
    49 /** Create new UI resource.
     49/** Create new UI resource in graphics mode.
    5050 *
    5151 * @param gc Graphic context
     
    5353 * @return EOK on success, ENOMEM if out of memory
    5454 */
    55 errno_t ui_resource_create(gfx_context_t *gc, ui_resource_t **rresource)
     55static errno_t ui_resource_create_gfx(gfx_context_t *gc,
     56    ui_resource_t **rresource)
    5657{
    5758        ui_resource_t *resource;
     
    6162        gfx_color_t *btn_frame_color = NULL;
    6263        gfx_color_t *btn_face_color = NULL;
     64        gfx_color_t *btn_face_lit_color = NULL;
    6365        gfx_color_t *btn_text_color = NULL;
    6466        gfx_color_t *btn_highlight_color = NULL;
     
    6668        gfx_color_t *wnd_face_color = NULL;
    6769        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;
    6875        gfx_color_t *wnd_frame_hi_color = NULL;
    6976        gfx_color_t *wnd_frame_sh_color = NULL;
     
    7683        gfx_color_t *entry_fg_color = NULL;
    7784        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;
    7890        errno_t rc;
    7991
     
    104116                goto error;
    105117
     118        rc = gfx_color_new_rgb_i16(0xe8e8, 0xe8e8, 0xe8e8, &btn_face_lit_color);
     119        if (rc != EOK)
     120                goto error;
     121
    106122        rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_text_color);
    107123        if (rc != EOK)
     
    125141                goto error;
    126142
     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
    127165        rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_frame_hi_color);
    128166        if (rc != EOK)
    129167                goto error;
    130168
    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);
    132170        if (rc != EOK)
    133171                goto error;
     
    166204
    167205        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);
    168229        if (rc != EOK)
    169230                goto error;
     
    172233        resource->tface = tface;
    173234        resource->font = font;
     235        resource->textmode = false;
    174236
    175237        resource->btn_frame_color = btn_frame_color;
    176238        resource->btn_face_color = btn_face_color;
     239        resource->btn_face_lit_color = btn_face_lit_color;
    177240        resource->btn_text_color = btn_text_color;
    178241        resource->btn_highlight_color = btn_highlight_color;
     
    181244        resource->wnd_face_color = wnd_face_color;
    182245        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;
    183251        resource->wnd_frame_hi_color = wnd_frame_hi_color;
    184252        resource->wnd_frame_sh_color = wnd_frame_sh_color;
     
    193261        resource->entry_fg_color = entry_fg_color;
    194262        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;
    195269
    196270        *rresource = resource;
     
    201275        if (btn_face_color != NULL)
    202276                gfx_color_delete(btn_face_color);
     277        if (btn_face_lit_color != NULL)
     278                gfx_color_delete(btn_face_lit_color);
    203279        if (btn_text_color != NULL)
    204280                gfx_color_delete(btn_text_color);
     
    212288        if (wnd_text_color != NULL)
    213289                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);
    214300        if (wnd_frame_hi_color != NULL)
    215301                gfx_color_delete(wnd_frame_hi_color);
     
    234320        if (entry_bg_color != NULL)
    235321                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);
    236333
    237334        if (tface != NULL)
     
    241338}
    242339
     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 */
     346static 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;
     547error:
     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 */
     621errno_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
    243630/** Destroy UI resource.
    244631 *
     
    252639        gfx_color_delete(resource->btn_frame_color);
    253640        gfx_color_delete(resource->btn_face_color);
     641        gfx_color_delete(resource->btn_face_lit_color);
    254642        gfx_color_delete(resource->btn_text_color);
    255643        gfx_color_delete(resource->btn_highlight_color);
     
    258646        gfx_color_delete(resource->wnd_face_color);
    259647        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);
    260651        gfx_color_delete(resource->wnd_frame_hi_color);
    261652        gfx_color_delete(resource->wnd_frame_sh_color);
     
    270661        gfx_color_delete(resource->entry_fg_color);
    271662        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);
    272669
    273670        gfx_font_close(resource->font);
     
    276673}
    277674
     675/** Set UI resource expose callback.
     676 *
     677 * @param resource Resource
     678 * @param cb Callback
     679 * @param arg Callback argument
     680 */
     681void 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 */
     697void 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 */
     708gfx_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 */
     718bool 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 */
     728gfx_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 */
     738gfx_color_t *ui_resource_get_wnd_text_color(ui_resource_t *resource)
     739{
     740        return resource->wnd_text_color;
     741}
     742
    278743/** @}
    279744 */
Note: See TracChangeset for help on using the changeset viewer.