Changeset de9992c in mainline for uspace/lib/ui/src/pbutton.c


Ignore:
Timestamp:
2020-10-16T23:34:55Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1769693
Parents:
8ef48ece
git-author:
Jiri Svoboda <jiri@…> (2020-10-16 23:31:37)
git-committer:
Jiri Svoboda <jiri@…> (2020-10-16 23:34:55)
Message:

Factor out bevel drawing, store button colors in ui_resource_t

File:
1 edited

Legend:

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

    r8ef48ece rde9992c  
    4242#include <stdlib.h>
    4343#include <str.h>
     44#include <ui/paint.h>
    4445#include <ui/pbutton.h>
    4546#include "../private/pbutton.h"
     
    133134static errno_t ui_pbutton_paint_frame(ui_pbutton_t *pbutton)
    134135{
    135         gfx_color_t *color = NULL;
    136136        gfx_rect_t rect;
    137137        gfx_coord_t thickness;
     
    140140        thickness = pbutton->isdefault ? 2 : 1;
    141141
    142         rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
    143         if (rc != EOK)
    144                 goto error;
    145 
    146         rc = gfx_set_color(pbutton->res->gc, color);
     142        rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_frame_color);
    147143        if (rc != EOK)
    148144                goto error;
     
    180176                goto error;
    181177
    182         gfx_color_delete(color);
    183178        return EOK;
    184179error:
    185         if (color != NULL)
    186                 gfx_color_delete(color);
    187180        return rc;
    188181}
     
    196189    gfx_rect_t *rect)
    197190{
    198         gfx_color_t *color = NULL;
    199         gfx_rect_t frect;
    200         gfx_coord_t i;
    201         errno_t rc;
    202 
    203         /* Highlight */
    204 
    205         rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &color);
    206         if (rc != EOK)
    207                 goto error;
    208 
    209         rc = gfx_set_color(pbutton->res->gc, color);
    210         if (rc != EOK)
    211                 goto error;
    212 
    213         for (i = 0; i < 2; i++) {
    214                 frect.p0.x = rect->p0.x + i;
    215                 frect.p0.y = rect->p0.y + i;
    216                 frect.p1.x = rect->p1.x - i - 1;
    217                 frect.p1.y = rect->p0.y + i + 1;
    218                 rc = gfx_fill_rect(pbutton->res->gc, &frect);
    219                 if (rc != EOK)
    220                         goto error;
    221 
    222                 frect.p0.x = rect->p0.x + i;
    223                 frect.p0.y = rect->p0.y + i + 1;
    224                 frect.p1.x = rect->p0.x + i + 1;
    225                 frect.p1.y = rect->p1.y - i - 1;
    226                 rc = gfx_fill_rect(pbutton->res->gc, &frect);
    227                 if (rc != EOK)
    228                         goto error;
    229         }
    230 
    231         gfx_color_delete(color);
    232         color = NULL;
    233 
    234         /* Shadow */
    235 
    236         rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &color);
    237         if (rc != EOK)
    238                 goto error;
    239 
    240         rc = gfx_set_color(pbutton->res->gc, color);
    241         if (rc != EOK)
    242                 goto error;
    243 
    244         for (i = 0; i < 2; i++) {
    245                 frect.p0.x = rect->p0.x + i;
    246                 frect.p0.y = rect->p1.y - i - 1;
    247                 frect.p1.x = rect->p1.x - i - 1;
    248                 frect.p1.y = rect->p1.y - i;
    249                 rc = gfx_fill_rect(pbutton->res->gc, &frect);
    250                 if (rc != EOK)
    251                         goto error;
    252 
    253                 frect.p0.x = rect->p1.x - i - 1;
    254                 frect.p0.y = rect->p0.y + i;
    255                 frect.p1.x = rect->p1.x - i;
    256                 frect.p1.y = rect->p1.y - i;
    257                 rc = gfx_fill_rect(pbutton->res->gc, &frect);
    258                 if (rc != EOK)
    259                         goto error;
    260         }
    261 
    262         gfx_color_delete(color);
    263 
    264         return EOK;
    265 error:
    266         if (color != NULL)
    267                 gfx_color_delete(color);
    268         return rc;
     191        return ui_paint_bevel(pbutton->res->gc, rect,
     192            pbutton->res->btn_highlight_color,
     193            pbutton->res->btn_shadow_color, 2, NULL);
    269194}
    270195
     
    277202    gfx_rect_t *rect)
    278203{
    279         gfx_color_t *color = NULL;
    280         gfx_rect_t frect;
    281         errno_t rc;
    282 
    283         rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &color);
    284         if (rc != EOK)
    285                 goto error;
    286 
    287         rc = gfx_set_color(pbutton->res->gc, color);
    288         if (rc != EOK)
    289                 goto error;
    290 
    291         frect.p0.x = rect->p0.x;
    292         frect.p0.y = rect->p0.y;
    293         frect.p1.x = rect->p1.x;
    294         frect.p1.y = rect->p0.y + 2;
    295         rc = gfx_fill_rect(pbutton->res->gc, &frect);
    296         if (rc != EOK)
    297                 goto error;
    298 
    299         frect.p0.x = rect->p0.x;
    300         frect.p0.y = rect->p0.y + 2;
    301         frect.p1.x = rect->p0.x + 2;
    302         frect.p1.y = rect->p1.y;
    303         rc = gfx_fill_rect(pbutton->res->gc, &frect);
    304         if (rc != EOK)
    305                 goto error;
    306 
    307         gfx_color_delete(color);
    308 
    309         return EOK;
    310 error:
    311         if (color != NULL)
    312                 gfx_color_delete(color);
    313         return rc;
     204        return ui_paint_bevel(pbutton->res->gc, rect,
     205            pbutton->res->btn_shadow_color,
     206            pbutton->res->btn_face_color, 2, NULL);
    314207}
    315208
     
    321214errno_t ui_pbutton_paint(ui_pbutton_t *pbutton)
    322215{
    323         gfx_color_t *color = NULL;
    324216        gfx_coord2_t pos;
    325217        gfx_text_fmt_t fmt;
     
    337229        rect.p1.y = pbutton->rect.p1.y - thickness;
    338230
    339         rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &color);
    340         if (rc != EOK)
    341                 goto error;
    342 
    343         rc = gfx_set_color(pbutton->res->gc, color);
    344         if (rc != EOK)
    345                 goto error;
    346 
    347         rc = gfx_fill_rect(pbutton->res->gc, &rect);
    348         if (rc != EOK)
    349                 goto error;
    350 
    351         gfx_color_delete(color);
    352         color = NULL;
    353 
    354         rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
    355         if (rc != EOK)
    356                 goto error;
    357 
    358         rc = gfx_set_color(pbutton->res->gc, color);
     231        rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_face_color);
     232        if (rc != EOK)
     233                goto error;
     234
     235        rc = gfx_fill_rect(pbutton->res->gc, &rect);
     236        if (rc != EOK)
     237                goto error;
     238
     239        rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_text_color);
    359240        if (rc != EOK)
    360241                goto error;
     
    376257        if (rc != EOK)
    377258                goto error;
    378 
    379         gfx_color_delete(color);
    380         color = NULL;
    381259
    382260        rc = ui_pbutton_paint_frame(pbutton);
     
    396274        return EOK;
    397275error:
    398         if (color != NULL)
    399                 gfx_color_delete(color);
    400276        return rc;
    401277}
Note: See TracChangeset for help on using the changeset viewer.