Ignore:
File:
1 edited

Legend:

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

    r214aefb ref4d684  
    11/*
    2  * Copyright (c) 2021 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
    52  * @param textmode @c true if running in text mode
    5352 * @param rresource Place to store pointer to new UI resource
    5453 * @return EOK on success, ENOMEM if out of memory
    5554 */
    56 errno_t ui_resource_create(gfx_context_t *gc, bool textmode,
     55static errno_t ui_resource_create_gfx(gfx_context_t *gc,
    5756    ui_resource_t **rresource)
    5857{
     
    6362        gfx_color_t *btn_frame_color = NULL;
    6463        gfx_color_t *btn_face_color = NULL;
     64        gfx_color_t *btn_face_lit_color = NULL;
    6565        gfx_color_t *btn_text_color = NULL;
    6666        gfx_color_t *btn_highlight_color = NULL;
     
    6868        gfx_color_t *wnd_face_color = NULL;
    6969        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;
    7072        gfx_color_t *wnd_sel_text_color = NULL;
     73        gfx_color_t *wnd_sel_text_hgl_color = NULL;
    7174        gfx_color_t *wnd_sel_text_bg_color = NULL;
    7275        gfx_color_t *wnd_frame_hi_color = NULL;
     
    8184        gfx_color_t *entry_bg_color = NULL;
    8285        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;
    8390        errno_t rc;
    8491
     
    8794                return ENOMEM;
    8895
    89         if (textmode) {
    90                 /* Create dummy font for text mode */
    91                 rc = gfx_typeface_create(gc, &tface);
    92                 if (rc != EOK)
    93                         goto error;
    94 
    95                 rc = gfx_font_create_textmode(tface, &font);
    96                 if (rc != EOK)
    97                         goto error;
    98         } else {
    99                 rc = gfx_typeface_open(gc, ui_typeface_path, &tface);
    100                 if (rc != EOK)
    101                         goto error;
    102 
    103                 finfo = gfx_typeface_first_font(tface);
    104                 if (finfo == NULL) {
    105                         rc = EIO;
    106                         goto error;
    107                 }
    108 
    109                 rc = gfx_font_open(finfo, &font);
    110                 if (rc != EOK)
    111                         goto error;
     96        rc = gfx_typeface_open(gc, ui_typeface_path, &tface);
     97        if (rc != EOK)
     98                goto error;
     99
     100        finfo = gfx_typeface_first_font(tface);
     101        if (finfo == NULL) {
     102                rc = EIO;
     103                goto error;
    112104        }
    113105
     106        rc = gfx_font_open(finfo, &font);
     107        if (rc != EOK)
     108                goto error;
     109
    114110        rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_frame_color);
    115111        if (rc != EOK)
     
    117113
    118114        rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &btn_face_color);
     115        if (rc != EOK)
     116                goto error;
     117
     118        rc = gfx_color_new_rgb_i16(0xe8e8, 0xe8e8, 0xe8e8, &btn_face_lit_color);
    119119        if (rc != EOK)
    120120                goto error;
     
    141141                goto error;
    142142
     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
    143151        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);
    144157        if (rc != EOK)
    145158                goto error;
     
    195208
    196209        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);
    197229        if (rc != EOK)
    198230                goto error;
     
    201233        resource->tface = tface;
    202234        resource->font = font;
    203         resource->textmode = textmode;
     235        resource->textmode = false;
    204236
    205237        resource->btn_frame_color = btn_frame_color;
    206238        resource->btn_face_color = btn_face_color;
     239        resource->btn_face_lit_color = btn_face_lit_color;
    207240        resource->btn_text_color = btn_text_color;
    208241        resource->btn_highlight_color = btn_highlight_color;
     
    211244        resource->wnd_face_color = wnd_face_color;
    212245        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;
    213248        resource->wnd_sel_text_color = wnd_sel_text_color;
     249        resource->wnd_sel_text_hgl_color = wnd_sel_text_hgl_color;
    214250        resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
    215251        resource->wnd_frame_hi_color = wnd_frame_hi_color;
     
    226262        resource->entry_bg_color = entry_bg_color;
    227263        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;
    228269
    229270        *rresource = resource;
     
    234275        if (btn_face_color != NULL)
    235276                gfx_color_delete(btn_face_color);
     277        if (btn_face_lit_color != NULL)
     278                gfx_color_delete(btn_face_lit_color);
    236279        if (btn_text_color != NULL)
    237280                gfx_color_delete(btn_text_color);
     
    245288        if (wnd_text_color != NULL)
    246289                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);
    247294        if (wnd_sel_text_color != NULL)
    248295                gfx_color_delete(wnd_sel_text_color);
     296        if (wnd_sel_text_hgl_color != NULL)
     297                gfx_color_delete(wnd_sel_text_hgl_color);
    249298        if (wnd_sel_text_bg_color != NULL)
    250299                gfx_color_delete(wnd_sel_text_bg_color);
     
    271320        if (entry_bg_color != NULL)
    272321                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);
    273326        if (entry_act_bg_color != NULL)
    274327                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);
    275333
    276334        if (tface != NULL)
     
    280338}
    281339
     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
    282630/** Destroy UI resource.
    283631 *
     
    291639        gfx_color_delete(resource->btn_frame_color);
    292640        gfx_color_delete(resource->btn_face_color);
     641        gfx_color_delete(resource->btn_face_lit_color);
    293642        gfx_color_delete(resource->btn_text_color);
    294643        gfx_color_delete(resource->btn_highlight_color);
     
    297646        gfx_color_delete(resource->wnd_face_color);
    298647        gfx_color_delete(resource->wnd_text_color);
     648        gfx_color_delete(resource->wnd_dis_text_color);
    299649        gfx_color_delete(resource->wnd_sel_text_color);
    300650        gfx_color_delete(resource->wnd_sel_text_bg_color);
     
    312662        gfx_color_delete(resource->entry_bg_color);
    313663        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);
    314669
    315670        gfx_font_close(resource->font);
     
    346701}
    347702
     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
    348743/** @}
    349744 */
Note: See TracChangeset for help on using the changeset viewer.