Ignore:
File:
1 edited

Legend:

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

    ref4d684 r214aefb  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4747static const char *ui_typeface_path = "/data/font/helena.tpf";
    4848
    49 /** Create new UI resource in graphics mode.
     49/** Create new UI resource.
    5050 *
    5151 * @param gc Graphic context
     52 * @param textmode @c true if running in text mode
    5253 * @param rresource Place to store pointer to new UI resource
    5354 * @return EOK on success, ENOMEM if out of memory
    5455 */
    55 static errno_t ui_resource_create_gfx(gfx_context_t *gc,
     56errno_t ui_resource_create(gfx_context_t *gc, bool textmode,
    5657    ui_resource_t **rresource)
    5758{
     
    6263        gfx_color_t *btn_frame_color = NULL;
    6364        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;
    7270        gfx_color_t *wnd_sel_text_color = NULL;
    73         gfx_color_t *wnd_sel_text_hgl_color = NULL;
    7471        gfx_color_t *wnd_sel_text_bg_color = NULL;
    7572        gfx_color_t *wnd_frame_hi_color = NULL;
     
    8481        gfx_color_t *entry_bg_color = NULL;
    8582        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;
    9083        errno_t rc;
    9184
     
    9487                return ENOMEM;
    9588
    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;
     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;
    104112        }
    105113
    106         rc = gfx_font_open(finfo, &font);
    107         if (rc != EOK)
    108                 goto error;
    109 
    110114        rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_frame_color);
    111115        if (rc != EOK)
     
    113117
    114118        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 
    151143        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);
    157144        if (rc != EOK)
    158145                goto error;
     
    208195
    209196        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);
    229197        if (rc != EOK)
    230198                goto error;
     
    233201        resource->tface = tface;
    234202        resource->font = font;
    235         resource->textmode = false;
     203        resource->textmode = textmode;
    236204
    237205        resource->btn_frame_color = btn_frame_color;
    238206        resource->btn_face_color = btn_face_color;
    239         resource->btn_face_lit_color = btn_face_lit_color;
    240207        resource->btn_text_color = btn_text_color;
    241208        resource->btn_highlight_color = btn_highlight_color;
     
    244211        resource->wnd_face_color = wnd_face_color;
    245212        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;
    248213        resource->wnd_sel_text_color = wnd_sel_text_color;
    249         resource->wnd_sel_text_hgl_color = wnd_sel_text_hgl_color;
    250214        resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
    251215        resource->wnd_frame_hi_color = wnd_frame_hi_color;
     
    262226        resource->entry_bg_color = entry_bg_color;
    263227        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;
    269228
    270229        *rresource = resource;
     
    275234        if (btn_face_color != NULL)
    276235                gfx_color_delete(btn_face_color);
    277         if (btn_face_lit_color != NULL)
    278                 gfx_color_delete(btn_face_lit_color);
    279236        if (btn_text_color != NULL)
    280237                gfx_color_delete(btn_text_color);
     
    288245        if (wnd_text_color != NULL)
    289246                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);
    294247        if (wnd_sel_text_color != NULL)
    295248                gfx_color_delete(wnd_sel_text_color);
    296         if (wnd_sel_text_hgl_color != NULL)
    297                 gfx_color_delete(wnd_sel_text_hgl_color);
    298249        if (wnd_sel_text_bg_color != NULL)
    299250                gfx_color_delete(wnd_sel_text_bg_color);
     
    320271        if (entry_bg_color != NULL)
    321272                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);
    326273        if (entry_act_bg_color != NULL)
    327274                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);
    333275
    334276        if (tface != NULL)
     
    338280}
    339281
    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 
    630282/** Destroy UI resource.
    631283 *
     
    639291        gfx_color_delete(resource->btn_frame_color);
    640292        gfx_color_delete(resource->btn_face_color);
    641         gfx_color_delete(resource->btn_face_lit_color);
    642293        gfx_color_delete(resource->btn_text_color);
    643294        gfx_color_delete(resource->btn_highlight_color);
     
    646297        gfx_color_delete(resource->wnd_face_color);
    647298        gfx_color_delete(resource->wnd_text_color);
    648         gfx_color_delete(resource->wnd_dis_text_color);
    649299        gfx_color_delete(resource->wnd_sel_text_color);
    650300        gfx_color_delete(resource->wnd_sel_text_bg_color);
     
    662312        gfx_color_delete(resource->entry_bg_color);
    663313        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);
    669314
    670315        gfx_font_close(resource->font);
     
    701346}
    702347
    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 
    743348/** @}
    744349 */
Note: See TracChangeset for help on using the changeset viewer.