Changeset b769ca0 in mainline


Ignore:
Timestamp:
2026-02-19T00:01:36Z (15 hours ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Parents:
39f67f1
Message:

Allow overriding the complete UI push button paint routine.

Location:
uspace/lib/ui
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/include/types/ui/pbutton.h

    r39f67f1 rb769ca0  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5656} ui_pbutton_cb_t;
    5757
    58 /** Push button decoration ops */
    59 typedef struct ui_pbutton_decor_ops {
    60         errno_t (*paint)(ui_pbutton_t *, void *, gfx_coord2_t *);
    61 } ui_pbutton_decor_ops_t;
     58/** Push button ops */
     59typedef struct ui_pbutton_ops {
     60        errno_t (*decor_paint)(ui_pbutton_t *, void *, gfx_coord2_t *);
     61        errno_t (*paint)(ui_pbutton_t *, void *);
     62} ui_pbutton_ops_t;
    6263
    6364#endif
  • uspace/lib/ui/include/ui/pbutton.h

    r39f67f1 rb769ca0  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5151extern ui_control_t *ui_pbutton_ctl(ui_pbutton_t *);
    5252extern void ui_pbutton_set_cb(ui_pbutton_t *, ui_pbutton_cb_t *, void *);
    53 extern void ui_pbutton_set_decor_ops(ui_pbutton_t *, ui_pbutton_decor_ops_t *,
     53extern void ui_pbutton_set_ops(ui_pbutton_t *, ui_pbutton_ops_t *,
    5454    void *);
    5555extern void ui_pbutton_set_flags(ui_pbutton_t *, ui_pbutton_flags_t);
  • uspace/lib/ui/private/pbutton.h

    r39f67f1 rb769ca0  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5555        /** Callback argument */
    5656        void *arg;
    57         /** Custom decoration ops or @c NULL */
    58         struct ui_pbutton_decor_ops *decor_ops;
    59         /** Decoration argument */
    60         void *decor_arg;
     57        /** Custom ops or @c NULL */
     58        struct ui_pbutton_ops *ops;
     59        /** Ops argument */
     60        void *ops_arg;
    6161        /** Push button rectangle */
    6262        gfx_rect_t rect;
  • uspace/lib/ui/src/pbutton.c

    r39f67f1 rb769ca0  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    142142}
    143143
    144 /** Set push button decoration ops.
    145  *
    146  * @param pbutton Push button
    147  * @param ops Push button decoration callbacks
     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
    148151 * @param arg Decoration ops argument
    149152 */
    150 void ui_pbutton_set_decor_ops(ui_pbutton_t *pbutton,
    151     ui_pbutton_decor_ops_t *ops, void *arg)
    152 {
    153         pbutton->decor_ops = ops;
    154         pbutton->decor_arg = arg;
     153void 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;
    155157}
    156158
     
    379381        }
    380382
    381         if (pbutton->decor_ops != NULL && pbutton->decor_ops->paint != NULL) {
     383        if (pbutton->ops != NULL && pbutton->ops->decor_paint != NULL) {
    382384                /* Custom decoration */
    383                 rc = pbutton->decor_ops->paint(pbutton, pbutton->decor_arg,
     385                rc = pbutton->ops->decor_paint(pbutton, pbutton->ops_arg,
    384386                    &pos);
    385387                if (rc != EOK)
     
    503505errno_t ui_pbutton_paint(ui_pbutton_t *pbutton)
    504506{
    505         if (pbutton->res->textmode)
     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) {
    506511                return ui_pbutton_paint_text(pbutton);
    507         else
     512        } else {
    508513                return ui_pbutton_paint_gfx(pbutton);
     514        }
    509515}
    510516
  • uspace/lib/ui/src/scrollbar.c

    r39f67f1 rb769ca0  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    112112};
    113113
    114 static ui_pbutton_decor_ops_t ui_scrollbar_up_btn_decor_ops = {
    115         .paint = ui_scrollbar_up_btn_decor_paint
     114static ui_pbutton_ops_t ui_scrollbar_up_btn_ops = {
     115        .decor_paint = ui_scrollbar_up_btn_decor_paint
    116116};
    117117
     
    121121};
    122122
    123 static ui_pbutton_decor_ops_t ui_scrollbar_down_btn_decor_ops = {
    124         .paint = ui_scrollbar_down_btn_decor_paint
     123static ui_pbutton_ops_t ui_scrollbar_down_btn_ops = {
     124        .decor_paint = ui_scrollbar_down_btn_decor_paint
    125125};
    126126
     
    202202            scrollbar);
    203203
    204         ui_pbutton_set_decor_ops(scrollbar->up_btn,
    205             &ui_scrollbar_up_btn_decor_ops, (void *) scrollbar);
     204        ui_pbutton_set_ops(scrollbar->up_btn, &ui_scrollbar_up_btn_ops,
     205            (void *)scrollbar);
    206206
    207207        ui_pbutton_set_flags(scrollbar->up_btn, ui_pbf_no_text_depress);
     
    212212
    213213        ui_pbutton_set_cb(scrollbar->down_btn, &ui_scrollbar_down_btn_cb,
    214             (void *) scrollbar);
    215 
    216         ui_pbutton_set_decor_ops(scrollbar->down_btn,
    217             &ui_scrollbar_down_btn_decor_ops, (void *) scrollbar);
     214            (void *)scrollbar);
     215
     216        ui_pbutton_set_ops(scrollbar->down_btn, &ui_scrollbar_down_btn_ops,
     217            (void *)scrollbar);
    218218
    219219        ui_pbutton_set_flags(scrollbar->down_btn, ui_pbf_no_text_depress);
  • uspace/lib/ui/src/wdecor.c

    r39f67f1 rb769ca0  
    11/*
    2  * Copyright (c) 2024 Jiri Svoboda
     2 * Copyright (c) 2026 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6666};
    6767
    68 static ui_pbutton_decor_ops_t ui_wdecor_btn_min_decor_ops = {
    69         .paint = ui_wdecor_btn_min_paint
     68static ui_pbutton_ops_t ui_wdecor_btn_min_ops = {
     69        .decor_paint = ui_wdecor_btn_min_paint
    7070};
    7171
     
    7474};
    7575
    76 static ui_pbutton_decor_ops_t ui_wdecor_btn_max_decor_ops = {
    77         .paint = ui_wdecor_btn_max_paint
     76static ui_pbutton_ops_t ui_wdecor_btn_max_ops = {
     77        .decor_paint = ui_wdecor_btn_max_paint
    7878};
    7979
     
    8282};
    8383
    84 static ui_pbutton_decor_ops_t ui_wdecor_btn_close_decor_ops = {
    85         .paint = ui_wdecor_btn_close_paint
     84static ui_pbutton_ops_t ui_wdecor_btn_close_ops = {
     85        .decor_paint = ui_wdecor_btn_close_paint
    8686};
    8787
     
    175175                    (void *)wdecor);
    176176
    177                 ui_pbutton_set_decor_ops(wdecor->btn_min,
    178                     &ui_wdecor_btn_min_decor_ops, (void *)wdecor);
     177                ui_pbutton_set_ops(wdecor->btn_min, &ui_wdecor_btn_min_ops,
     178                    (void *)wdecor);
    179179        }
    180180
     
    189189                    (void *)wdecor);
    190190
    191                 ui_pbutton_set_decor_ops(wdecor->btn_max,
    192                     &ui_wdecor_btn_max_decor_ops, (void *)wdecor);
     191                ui_pbutton_set_ops(wdecor->btn_max, &ui_wdecor_btn_max_ops,
     192                    (void *)wdecor);
    193193        }
    194194
     
    203203                    (void *)wdecor);
    204204
    205                 ui_pbutton_set_decor_ops(wdecor->btn_close,
    206                     &ui_wdecor_btn_close_decor_ops, (void *)wdecor);
     205                ui_pbutton_set_ops(wdecor->btn_close, &ui_wdecor_btn_close_ops,
     206                    (void *)wdecor);
    207207        }
    208208
Note: See TracChangeset for help on using the changeset viewer.