Changeset d68239a1 in mainline for uspace/lib/ui/src/scrollbar.c


Ignore:
Timestamp:
2022-04-04T14:48:41Z (2 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
86fff971
Parents:
0d1d0ea
git-author:
Jiri Svoboda <jiri@…> (2022-04-03 17:48:17)
git-committer:
Jiri Svoboda <jiri@…> (2022-04-04 14:48:41)
Message:

Scrollbar needs custom button decorations

Push button now allows setting a 'custom decoration' which means
instead of painting the button text a callback function is invoked
to paint the decoration.

File:
1 edited

Legend:

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

    r0d1d0ea rd68239a1  
    7878enum {
    7979        /** Scrollbar button width */
    80         ui_scrollbar_btn_len = 20,
     80        ui_scrollbar_btn_len = 21,
    8181        /** Scrollbar button width in text mode */
    8282        ui_scrollbar_btn_len_text = 1,
     
    8686        ui_scrollbar_thumb_bevel_width = 2,
    8787        /** Scrollbar default thumb length */
    88         ui_scrollbar_def_thumb_len = 20,
     88        ui_scrollbar_def_thumb_len = 21,
    8989        /** Scrollbar default thumb length in text mode */
    9090        ui_scrollbar_def_thumb_len_text = 1,
     
    9797static void ui_scrollbar_up_btn_down(ui_pbutton_t *, void *);
    9898static void ui_scrollbar_up_btn_up(ui_pbutton_t *, void *);
     99static errno_t ui_scrollbar_up_btn_decor_paint(ui_pbutton_t *, void *,
     100    gfx_coord2_t *);
     101static errno_t ui_scrollbar_down_btn_decor_paint(ui_pbutton_t *, void *,
     102    gfx_coord2_t *);
    99103static void ui_scrollbar_down_btn_down(ui_pbutton_t *, void *);
    100104static void ui_scrollbar_down_btn_up(ui_pbutton_t *, void *);
     
    108112};
    109113
     114static ui_pbutton_decor_ops_t ui_scrollbar_up_btn_decor_ops = {
     115        .paint = ui_scrollbar_up_btn_decor_paint
     116};
     117
    110118static ui_pbutton_cb_t ui_scrollbar_down_btn_cb = {
    111119        .down = ui_scrollbar_down_btn_down,
    112120        .up = ui_scrollbar_down_btn_up
     121};
     122
     123static ui_pbutton_decor_ops_t ui_scrollbar_down_btn_decor_ops = {
     124        .paint = ui_scrollbar_down_btn_decor_paint
    113125};
    114126
     
    188200
    189201        ui_pbutton_set_cb(scrollbar->up_btn, &ui_scrollbar_up_btn_cb,
    190             (void *) scrollbar);
     202            scrollbar);
     203
     204        ui_pbutton_set_decor_ops(scrollbar->up_btn,
     205            &ui_scrollbar_up_btn_decor_ops, (void *) scrollbar);
    191206
    192207        rc = ui_pbutton_create(resource, down_text, &scrollbar->down_btn);
     
    196211        ui_pbutton_set_cb(scrollbar->down_btn, &ui_scrollbar_down_btn_cb,
    197212            (void *) scrollbar);
     213
     214        ui_pbutton_set_decor_ops(scrollbar->down_btn,
     215            &ui_scrollbar_down_btn_decor_ops, (void *) scrollbar);
    198216
    199217        scrollbar->thumb_len = resource->textmode ?
     
    961979}
    962980
     981/** Paint up button decoration.
     982 *
     983 * @param pbutton Push button
     984 * @param arg Argument (ui_scrollbar_t *)
     985 * @param pos Center position
     986 */
     987static errno_t ui_scrollbar_up_btn_decor_paint(ui_pbutton_t *pbutton,
     988    void *arg, gfx_coord2_t *pos)
     989{
     990        ui_scrollbar_t *scrollbar = (ui_scrollbar_t *)arg;
     991        errno_t rc;
     992
     993        rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_text_color);
     994        if (rc != EOK)
     995                return rc;
     996
     997        if (scrollbar->dir == ui_sbd_horiz)
     998                return ui_paint_left_triangle(pbutton->res->gc, pos, 5);
     999        else
     1000                return ui_paint_up_triangle(pbutton->res->gc, pos, 5);
     1001}
     1002
     1003/** Paint down button decoration.
     1004 *
     1005 * @param pbutton Push button
     1006 * @param arg Argument (ui_scrollbar_t *)
     1007 * @param pos Center position
     1008 */
     1009static errno_t ui_scrollbar_down_btn_decor_paint(ui_pbutton_t *pbutton,
     1010    void *arg, gfx_coord2_t *pos)
     1011{
     1012        ui_scrollbar_t *scrollbar = (ui_scrollbar_t *)arg;
     1013        errno_t rc;
     1014
     1015        rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_text_color);
     1016        if (rc != EOK)
     1017                return rc;
     1018
     1019        if (scrollbar->dir == ui_sbd_horiz)
     1020                return ui_paint_right_triangle(pbutton->res->gc, pos, 5);
     1021        else
     1022                return ui_paint_down_triangle(pbutton->res->gc, pos, 5);
     1023}
     1024
    9631025/** Scrollbar down button pressed.
    9641026 *
Note: See TracChangeset for help on using the changeset viewer.