Changeset bc52b5b in mainline for uspace/lib/ui/src/resource.c


Ignore:
Timestamp:
2021-08-15T10:02:32Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
99589a9
Parents:
de0c55a
Message:

Allow the use of EGA attributes/24-bit characters alongside RGB

In a big hack (since we cannot have different pixel formats yet) we
use a pixel format that allows both 24-bit RGB (without character)
or 24-bit character with 8-bit attributes. Thus in GFX we cannot
currently have characters with any RGB color, but we can set
foreground and background individually (and it even works in EGA mode).

File:
1 edited

Legend:

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

    rde0c55a rbc52b5b  
    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{
     
    8786                return ENOMEM;
    8887
    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;
     88        rc = gfx_typeface_open(gc, ui_typeface_path, &tface);
     89        if (rc != EOK)
     90                goto error;
     91
     92        finfo = gfx_typeface_first_font(tface);
     93        if (finfo == NULL) {
     94                rc = EIO;
     95                goto error;
    11296        }
     97
     98        rc = gfx_font_open(finfo, &font);
     99        if (rc != EOK)
     100                goto error;
    113101
    114102        rc = gfx_color_new_rgb_i16(0, 0, 0, &btn_frame_color);
     
    201189        resource->tface = tface;
    202190        resource->font = font;
    203         resource->textmode = textmode;
     191        resource->textmode = false;
    204192
    205193        resource->btn_frame_color = btn_frame_color;
     
    280268}
    281269
     270/** Create new UI resource in text mode.
     271 *
     272 * @param gc Graphic context
     273 * @param rresource Place to store pointer to new UI resource
     274 * @return EOK on success, ENOMEM if out of memory
     275 */
     276static errno_t ui_resource_create_text(gfx_context_t *gc,
     277    ui_resource_t **rresource)
     278{
     279        ui_resource_t *resource;
     280        gfx_typeface_t *tface = NULL;
     281        gfx_font_t *font = NULL;
     282        gfx_color_t *btn_frame_color = NULL;
     283        gfx_color_t *btn_face_color = NULL;
     284        gfx_color_t *btn_text_color = NULL;
     285        gfx_color_t *btn_highlight_color = NULL;
     286        gfx_color_t *btn_shadow_color = NULL;
     287        gfx_color_t *wnd_face_color = NULL;
     288        gfx_color_t *wnd_text_color = NULL;
     289        gfx_color_t *wnd_sel_text_color = NULL;
     290        gfx_color_t *wnd_sel_text_bg_color = NULL;
     291        gfx_color_t *wnd_frame_hi_color = NULL;
     292        gfx_color_t *wnd_frame_sh_color = NULL;
     293        gfx_color_t *wnd_highlight_color = NULL;
     294        gfx_color_t *wnd_shadow_color = NULL;
     295        gfx_color_t *tbar_act_bg_color = NULL;
     296        gfx_color_t *tbar_inact_bg_color = NULL;
     297        gfx_color_t *tbar_act_text_color = NULL;
     298        gfx_color_t *tbar_inact_text_color = NULL;
     299        gfx_color_t *entry_fg_color = NULL;
     300        gfx_color_t *entry_bg_color = NULL;
     301        gfx_color_t *entry_act_bg_color = NULL;
     302        errno_t rc;
     303
     304        resource = calloc(1, sizeof(ui_resource_t));
     305        if (resource == NULL)
     306                return ENOMEM;
     307
     308        /* Create dummy font for text mode */
     309        rc = gfx_typeface_create(gc, &tface);
     310        if (rc != EOK)
     311                goto error;
     312
     313        rc = gfx_font_create_textmode(tface, &font);
     314        if (rc != EOK)
     315                goto error;
     316
     317        rc = gfx_color_new_ega(0x07, &btn_frame_color);
     318        if (rc != EOK)
     319                goto error;
     320
     321        rc = gfx_color_new_ega(0x20, &btn_face_color);
     322        if (rc != EOK)
     323                goto error;
     324
     325        rc = gfx_color_new_ega(0x20, &btn_text_color);
     326        if (rc != EOK)
     327                goto error;
     328
     329        rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
     330            &btn_highlight_color);
     331        if (rc != EOK)
     332                goto error;
     333
     334        rc = gfx_color_new_ega(0x01, &btn_shadow_color);
     335        if (rc != EOK)
     336                goto error;
     337
     338        rc = gfx_color_new_ega(0x70, &wnd_face_color);
     339        if (rc != EOK)
     340                goto error;
     341
     342        rc = gfx_color_new_ega(0x70, &wnd_text_color);
     343        if (rc != EOK)
     344                goto error;
     345
     346        rc = gfx_color_new_ega(0x07, &wnd_sel_text_color);
     347        if (rc != EOK)
     348                goto error;
     349
     350        rc = gfx_color_new_ega(0x07, &wnd_sel_text_bg_color);
     351        if (rc != EOK)
     352                goto error;
     353
     354        rc = gfx_color_new_ega(0x70, &wnd_frame_hi_color);
     355        if (rc != EOK)
     356                goto error;
     357
     358        rc = gfx_color_new_ega(0x01, &wnd_frame_sh_color);
     359        if (rc != EOK)
     360                goto error;
     361
     362        rc = gfx_color_new_ega(0x70, &wnd_highlight_color);
     363        if (rc != EOK)
     364                goto error;
     365
     366        rc = gfx_color_new_ega(0x01, &wnd_shadow_color);
     367        if (rc != EOK)
     368                goto error;
     369
     370        rc = gfx_color_new_ega(0x1f, &tbar_act_bg_color);
     371        if (rc != EOK)
     372                goto error;
     373
     374        rc = gfx_color_new_ega(0x1e, &tbar_act_text_color);
     375        if (rc != EOK)
     376                goto error;
     377
     378        rc = gfx_color_new_ega(0x07, &tbar_inact_bg_color);
     379        if (rc != EOK)
     380                goto error;
     381
     382        rc = gfx_color_new_ega(0x07, &tbar_inact_text_color);
     383        if (rc != EOK)
     384                goto error;
     385
     386        rc = gfx_color_new_ega(0x1b, &entry_fg_color);
     387        if (rc != EOK)
     388                goto error;
     389
     390        rc = gfx_color_new_ega(0x1b, &entry_bg_color);
     391        if (rc != EOK)
     392                goto error;
     393
     394        rc = gfx_color_new_ega(0x37, &entry_act_bg_color);
     395        if (rc != EOK)
     396                goto error;
     397
     398        resource->gc = gc;
     399        resource->tface = tface;
     400        resource->font = font;
     401        resource->textmode = true;
     402
     403        resource->btn_frame_color = btn_frame_color;
     404        resource->btn_face_color = btn_face_color;
     405        resource->btn_text_color = btn_text_color;
     406        resource->btn_highlight_color = btn_highlight_color;
     407        resource->btn_shadow_color = btn_shadow_color;
     408
     409        resource->wnd_face_color = wnd_face_color;
     410        resource->wnd_text_color = wnd_text_color;
     411        resource->wnd_sel_text_color = wnd_sel_text_color;
     412        resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
     413        resource->wnd_frame_hi_color = wnd_frame_hi_color;
     414        resource->wnd_frame_sh_color = wnd_frame_sh_color;
     415        resource->wnd_highlight_color = wnd_highlight_color;
     416        resource->wnd_shadow_color = wnd_shadow_color;
     417
     418        resource->tbar_act_bg_color = tbar_act_bg_color;
     419        resource->tbar_act_text_color = tbar_act_text_color;
     420        resource->tbar_inact_bg_color = tbar_inact_bg_color;
     421        resource->tbar_inact_text_color = tbar_inact_text_color;
     422
     423        resource->entry_fg_color = entry_fg_color;
     424        resource->entry_bg_color = entry_bg_color;
     425        resource->entry_act_bg_color = entry_act_bg_color;
     426
     427        *rresource = resource;
     428        return EOK;
     429error:
     430        if (btn_frame_color != NULL)
     431                gfx_color_delete(btn_frame_color);
     432        if (btn_face_color != NULL)
     433                gfx_color_delete(btn_face_color);
     434        if (btn_text_color != NULL)
     435                gfx_color_delete(btn_text_color);
     436        if (btn_highlight_color != NULL)
     437                gfx_color_delete(btn_highlight_color);
     438        if (btn_shadow_color != NULL)
     439                gfx_color_delete(btn_shadow_color);
     440
     441        if (wnd_face_color != NULL)
     442                gfx_color_delete(wnd_face_color);
     443        if (wnd_text_color != NULL)
     444                gfx_color_delete(wnd_text_color);
     445        if (wnd_sel_text_color != NULL)
     446                gfx_color_delete(wnd_sel_text_color);
     447        if (wnd_sel_text_bg_color != NULL)
     448                gfx_color_delete(wnd_sel_text_bg_color);
     449        if (wnd_frame_hi_color != NULL)
     450                gfx_color_delete(wnd_frame_hi_color);
     451        if (wnd_frame_sh_color != NULL)
     452                gfx_color_delete(wnd_frame_sh_color);
     453        if (wnd_highlight_color != NULL)
     454                gfx_color_delete(wnd_highlight_color);
     455        if (wnd_shadow_color != NULL)
     456                gfx_color_delete(wnd_shadow_color);
     457
     458        if (tbar_act_bg_color != NULL)
     459                gfx_color_delete(tbar_act_bg_color);
     460        if (tbar_act_text_color != NULL)
     461                gfx_color_delete(tbar_act_text_color);
     462        if (tbar_inact_bg_color != NULL)
     463                gfx_color_delete(tbar_inact_bg_color);
     464        if (tbar_inact_text_color != NULL)
     465                gfx_color_delete(tbar_inact_text_color);
     466
     467        if (entry_fg_color != NULL)
     468                gfx_color_delete(entry_fg_color);
     469        if (entry_bg_color != NULL)
     470                gfx_color_delete(entry_bg_color);
     471        if (entry_act_bg_color != NULL)
     472                gfx_color_delete(entry_act_bg_color);
     473
     474        if (tface != NULL)
     475                gfx_typeface_destroy(tface);
     476        free(resource);
     477        return rc;
     478}
     479
     480/** Create new UI resource.
     481 *
     482 * @param gc Graphic context
     483 * @param textmode @c true if running in text mode
     484 * @param rresource Place to store pointer to new UI resource
     485 * @return EOK on success, ENOMEM if out of memory
     486 */
     487errno_t ui_resource_create(gfx_context_t *gc, bool textmode,
     488    ui_resource_t **rresource)
     489{
     490        if (textmode)
     491                return ui_resource_create_text(gc, rresource);
     492        else
     493                return ui_resource_create_gfx(gc, rresource);
     494}
     495
    282496/** Destroy UI resource.
    283497 *
Note: See TracChangeset for help on using the changeset viewer.