Ignore:
File:
1 edited

Legend:

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

    rb769ca0 rbc52b5b  
    11/*
    2  * Copyright (c) 2026 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3232/**
    3333 * @file Push button
    34  *
    35  * Push button either uses text as decoration, or it can use a caller-provided
    36  * function to paint the decoration.
    3734 */
    3835
     
    5451enum {
    5552        ui_pb_press_dx = 1,
    56         ui_pb_press_dy = 1,
    57         ui_pb_pad_x = 2,
    58         ui_pb_pad_x_text = 1
     53        ui_pb_press_dy = 1
    5954};
    6055
     
    116111
    117112        ui_control_delete(pbutton->control);
    118         free(pbutton->caption);
    119113        free(pbutton);
    120114}
     
    142136}
    143137
    144 /** Set push button ops.
    145  *
    146  * These allow overriding the function for painting the button or
    147  * painting the button decoration.
    148  *
    149  * @param pbutton Push button
    150  * @param ops Push button ops
    151  * @param arg Decoration ops argument
    152  */
    153 void ui_pbutton_set_ops(ui_pbutton_t *pbutton, ui_pbutton_ops_t *ops, void *arg)
    154 {
    155         pbutton->ops = ops;
    156         pbutton->ops_arg = arg;
    157 }
    158 
    159 /** Set push button flag.s
    160  *
    161  * @param pbutton Push button
    162  * @param flags Flags
    163  */
    164 void ui_pbutton_set_flags(ui_pbutton_t *pbutton, ui_pbutton_flags_t flags)
    165 {
    166         pbutton->flags = flags;
    167 }
    168 
    169138/** Set button rectangle.
    170139 *
     
    188157{
    189158        pbutton->isdefault = isdefault;
    190 }
    191 
    192 /** Get button light status.
    193  *
    194  * @param pbutton Button
    195  * @return @c true iff light is on
    196  */
    197 bool ui_pbutton_get_light(ui_pbutton_t *pbutton)
    198 {
    199         return pbutton->light;
    200 }
    201 
    202 /** Turn button light on or off.
    203  *
    204  * @param pbutton Button
    205  * @param light @c true iff button should be lit
    206  */
    207 void ui_pbutton_set_light(ui_pbutton_t *pbutton, bool light)
    208 {
    209         pbutton->light = light;
    210 }
    211 
    212 /** Set push button caption.
    213  *
    214  * @param pbutton Button
    215  * @param caption New caption
    216  * @return EOK on success, ENOMEM if out of memory
    217  */
    218 errno_t ui_pbutton_set_caption(ui_pbutton_t *pbutton, const char *caption)
    219 {
    220         char *dcaption;
    221 
    222         dcaption = str_dup(caption);
    223         if (dcaption == NULL)
    224                 return ENOMEM;
    225 
    226         free(pbutton->caption);
    227         pbutton->caption = dcaption;
    228         return EOK;
    229159}
    230160
     
    347277        gfx_text_fmt_t fmt;
    348278        gfx_rect_t rect;
    349         gfx_rect_t irect;
    350279        gfx_coord_t thickness;
    351         gfx_color_t *color;
    352280        bool depressed;
    353281        errno_t rc;
     
    361289        rect.p1.y = pbutton->rect.p1.y - thickness;
    362290
    363         color = pbutton->light ? pbutton->res->btn_face_lit_color :
    364             pbutton->res->btn_face_color;
    365 
    366         rc = gfx_set_color(pbutton->res->gc, color);
     291        rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_face_color);
    367292        if (rc != EOK)
    368293                goto error;
     
    381306        }
    382307
    383         if (pbutton->ops != NULL && pbutton->ops->decor_paint != NULL) {
    384                 /* Custom decoration */
    385                 rc = pbutton->ops->decor_paint(pbutton, pbutton->ops_arg,
    386                     &pos);
    387                 if (rc != EOK)
    388                         goto error;
    389         } else {
    390                 /* Text decoration */
    391                 ui_paint_get_inset_frame_inside(pbutton->res, &rect, &irect);
    392                 gfx_text_fmt_init(&fmt);
    393                 fmt.font = pbutton->res->font;
    394                 fmt.color = pbutton->res->btn_text_color;
    395                 fmt.halign = gfx_halign_center;
    396                 fmt.valign = gfx_valign_center;
    397                 fmt.abbreviate = true;
    398                 fmt.width = irect.p1.x - irect.p0.x - 2 * ui_pb_pad_x;
    399 
    400                 rc = gfx_puttext(&pos, &fmt, pbutton->caption);
    401                 if (rc != EOK)
    402                         goto error;
    403         }
     308        gfx_text_fmt_init(&fmt);
     309        fmt.color = pbutton->res->btn_text_color;
     310        fmt.halign = gfx_halign_center;
     311        fmt.valign = gfx_valign_center;
     312
     313        rc = gfx_puttext(pbutton->res->font, &pos, &fmt, pbutton->caption);
     314        if (rc != EOK)
     315                goto error;
    404316
    405317        rc = ui_pbutton_paint_frame(pbutton);
     
    439351        errno_t rc;
    440352
    441         if ((pbutton->flags & ui_pbf_no_text_depress) == 0)
    442                 depressed = pbutton->held && pbutton->inside;
    443         else
    444                 depressed = false;
     353        depressed = pbutton->held && pbutton->inside;
    445354
    446355        rc = gfx_set_color(pbutton->res->gc, pbutton->res->wnd_face_color);
     
    470379
    471380        gfx_text_fmt_init(&fmt);
    472         fmt.font = pbutton->res->font;
    473381        fmt.color = pbutton->res->btn_text_color;
    474382        fmt.halign = gfx_halign_center;
    475383        fmt.valign = gfx_valign_center;
    476         fmt.abbreviate = true;
    477         fmt.width = rect.p1.x - rect.p0.x - 2 * ui_pb_pad_x_text;
    478         if (fmt.width < 1)
    479                 fmt.width = 1;
    480 
    481         rc = gfx_puttext(&pos, &fmt, pbutton->caption);
     384
     385        rc = gfx_puttext(pbutton->res->font, &pos, &fmt, pbutton->caption);
    482386        if (rc != EOK)
    483387                goto error;
     
    505409errno_t ui_pbutton_paint(ui_pbutton_t *pbutton)
    506410{
    507         if (pbutton->ops != NULL && pbutton->ops->paint != NULL) {
    508                 /* Custom paint routine */
    509                 return pbutton->ops->paint(pbutton, pbutton->ops_arg);
    510         } else if (pbutton->res->textmode) {
     411        if (pbutton->res->textmode)
    511412                return ui_pbutton_paint_text(pbutton);
    512         } else {
     413        else
    513414                return ui_pbutton_paint_gfx(pbutton);
    514         }
    515415}
    516416
     
    527427        pbutton->held = true;
    528428        (void) ui_pbutton_paint(pbutton);
    529         ui_pbutton_down(pbutton);
    530429}
    531430
     
    540439
    541440        pbutton->held = false;
    542         ui_pbutton_up(pbutton);
    543441
    544442        if (pbutton->inside) {
     
    576474}
    577475
    578 /** Send button clicked event.
     476/** Button was clicked.
    579477 *
    580478 * @param pbutton Push button
     
    584482        if (pbutton->cb != NULL && pbutton->cb->clicked != NULL)
    585483                pbutton->cb->clicked(pbutton, pbutton->arg);
    586 }
    587 
    588 /** Send button down event.
    589  *
    590  * @param pbutton Push button
    591  */
    592 void ui_pbutton_down(ui_pbutton_t *pbutton)
    593 {
    594         if (pbutton->cb != NULL && pbutton->cb->down != NULL)
    595                 pbutton->cb->down(pbutton, pbutton->arg);
    596 }
    597 
    598 /** Send button up event.
    599  *
    600  * @param pbutton Push button
    601  */
    602 void ui_pbutton_up(ui_pbutton_t *pbutton)
    603 {
    604         if (pbutton->cb != NULL && pbutton->cb->up != NULL)
    605                 pbutton->cb->up(pbutton, pbutton->arg);
    606484}
    607485
     
    643521                }
    644522                break;
    645         case POS_DCLICK:
    646                 break;
    647523        }
    648524
Note: See TracChangeset for help on using the changeset viewer.