Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset bd16113 in mainline


Ignore:
Timestamp:
2022-03-15T10:39:27Z (4 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
0eca788
Parents:
b3b48f4
git-author:
Jiri Svoboda <jiri@…> (2022-03-14 19:39:16)
git-committer:
Jiri Svoboda <jiri@…> (2022-03-15 10:39:27)
Message:

Scrollbar (WIP)

Location:
uspace
Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/uidemo/uidemo.c

    rb3b48f4 rbd16113  
    8787};
    8888
     89static void scrollbar_up(ui_scrollbar_t *, void *);
     90static void scrollbar_down(ui_scrollbar_t *, void *);
     91static void scrollbar_moved(ui_scrollbar_t *, void *, gfx_coord_t);
     92
     93static ui_scrollbar_cb_t scrollbar_cb = {
     94        .up = scrollbar_up,
     95        .down = scrollbar_down,
     96        .moved = scrollbar_moved
     97};
     98
    8999static void uidemo_file_load(ui_menu_entry_t *, void *);
    90100static void uidemo_file_message(ui_menu_entry_t *, void *);
     
    202212        rv = asprintf(&str, "Slider at %d of %d", (int) pos,
    203213            ui_slider_length(slider));
     214        if (rv < 0) {
     215                printf("Out of memory.\n");
     216                return;
     217        }
     218
     219        rc = ui_entry_set_text(demo->entry, str);
     220        if (rc != EOK)
     221                printf("Error changing entry text.\n");
     222        (void) ui_entry_paint(demo->entry);
     223
     224        free(str);
     225}
     226
     227/** Scrollbar up button pressed.
     228 *
     229 * @param scrollbar Scrollbar
     230 * @param arg Argument (demo)
     231 */
     232static void scrollbar_up(ui_scrollbar_t *scrollbar, void *arg)
     233{
     234        ui_demo_t *demo = (ui_demo_t *) arg;
     235        gfx_coord_t pos;
     236        char *str;
     237        errno_t rc;
     238        int rv;
     239
     240        pos = ui_scrollbar_get_pos(scrollbar);
     241        ui_scrollbar_set_pos(scrollbar, pos - 1);
     242
     243        pos = ui_scrollbar_get_pos(scrollbar);
     244
     245        rv = asprintf(&str, "Scrollbar: %d of %d", (int) pos,
     246            ui_scrollbar_move_length(scrollbar));
     247        if (rv < 0) {
     248                printf("Out of memory.\n");
     249                return;
     250        }
     251
     252        rc = ui_entry_set_text(demo->entry, str);
     253        if (rc != EOK)
     254                printf("Error changing entry text.\n");
     255        (void) ui_entry_paint(demo->entry);
     256
     257        free(str);
     258}
     259
     260/** Scrollbar down button pressed.
     261 *
     262 * @param scrollbar Scrollbar
     263 * @param arg Argument (demo)
     264 */
     265static void scrollbar_down(ui_scrollbar_t *scrollbar, void *arg)
     266{
     267        ui_demo_t *demo = (ui_demo_t *) arg;
     268        gfx_coord_t pos;
     269        char *str;
     270        errno_t rc;
     271        int rv;
     272
     273        pos = ui_scrollbar_get_pos(scrollbar);
     274        ui_scrollbar_set_pos(scrollbar, pos + 1);
     275
     276        pos = ui_scrollbar_get_pos(scrollbar);
     277
     278        rv = asprintf(&str, "Scrollbar: %d of %d", (int) pos,
     279            ui_scrollbar_move_length(scrollbar));
     280        if (rv < 0) {
     281                printf("Out of memory.\n");
     282                return;
     283        }
     284
     285        rc = ui_entry_set_text(demo->entry, str);
     286        if (rc != EOK)
     287                printf("Error changing entry text.\n");
     288        (void) ui_entry_paint(demo->entry);
     289
     290        free(str);
     291}
     292
     293/** Scrollbar was moved.
     294 *
     295 * @param scrollbar Scrollbar
     296 * @param arg Argument (demo)
     297 * @param pos Position
     298 */
     299static void scrollbar_moved(ui_scrollbar_t *scrollbar, void *arg,
     300    gfx_coord_t pos)
     301{
     302        ui_demo_t *demo = (ui_demo_t *) arg;
     303        char *str;
     304        errno_t rc;
     305        int rv;
     306
     307        rv = asprintf(&str, "Scrollbar: %d of %d", (int) pos,
     308            ui_scrollbar_move_length(scrollbar));
    204309        if (rv < 0) {
    205310                printf("Out of memory.\n");
     
    507612                params.rect.p0.y = 0;
    508613                params.rect.p1.x = 44;
    509                 params.rect.p1.y = 21;
     614                params.rect.p1.y = 23;
    510615        } else {
    511616                params.rect.p0.x = 0;
    512617                params.rect.p0.y = 0;
    513618                params.rect.p1.x = 220;
    514                 params.rect.p1.y = 350;
     619                params.rect.p1.y = 370;
    515620        }
    516621
     
    9561061
    9571062        rc = ui_fixed_add(demo.fixed, ui_slider_ctl(demo.slider));
     1063        if (rc != EOK) {
     1064                printf("Error adding control to layout.\n");
     1065                return rc;
     1066        }
     1067
     1068        rc = ui_scrollbar_create(ui_res, &demo.scrollbar);
     1069        if (rc != EOK) {
     1070                printf("Error creating button.\n");
     1071                return rc;
     1072        }
     1073
     1074        ui_scrollbar_set_cb(demo.scrollbar, &scrollbar_cb, (void *) &demo);
     1075
     1076        /* FIXME: Auto layout */
     1077        if (ui_is_textmode(ui)) {
     1078                rect.p0.x = 2;
     1079                rect.p0.y = 20;
     1080                rect.p1.x = 12;
     1081                rect.p1.y = 21;
     1082        } else {
     1083                rect.p0.x = 15;
     1084                rect.p0.y = 340;
     1085                rect.p1.x = 210;
     1086                rect.p1.y = 362;
     1087        }
     1088
     1089        ui_scrollbar_set_rect(demo.scrollbar, &rect);
     1090
     1091        ui_scrollbar_set_thumb_length(demo.scrollbar,
     1092            ui_scrollbar_through_length(demo.scrollbar) / 4);
     1093
     1094        rc = ui_fixed_add(demo.fixed, ui_scrollbar_ctl(demo.scrollbar));
    9581095        if (rc != EOK) {
    9591096                printf("Error adding control to layout.\n");
  • uspace/app/uidemo/uidemo.h

    rb3b48f4 rbd16113  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4646#include <ui/pbutton.h>
    4747#include <ui/rbutton.h>
     48#include <ui/scrollbar.h>
    4849#include <ui/slider.h>
    4950#include <ui/ui.h>
     
    7172        ui_rbutton_t *rbright;
    7273        ui_slider_t *slider;
     74        ui_scrollbar_t *scrollbar;
    7375} ui_demo_t;
    7476
  • uspace/lib/ui/meson.build

    rb3b48f4 rbd16113  
    4848        'src/rbutton.c',
    4949        'src/resource.c',
     50        'src/scrollbar.c',
    5051        'src/slider.c',
    5152        'src/ui.c',
  • uspace/lib/ui/private/resource.h

    rb3b48f4 rbd16113  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    114114        gfx_color_t *entry_sel_text_bg_color;
    115115
     116        /** Scrollbar through color */
     117        gfx_color_t *sbar_through_color;
     118
    116119        /** Expose callback or @c NULL */
    117120        ui_expose_cb_t expose_cb;
  • uspace/lib/ui/src/resource.c

    rb3b48f4 rbd16113  
    8484        gfx_color_t *entry_sel_text_fg_color = NULL;
    8585        gfx_color_t *entry_sel_text_bg_color = NULL;
     86        gfx_color_t *sbar_through_color = NULL;
    8687        errno_t rc;
    8788
     
    205206
    206207        rc = gfx_color_new_rgb_i16(0, 0, 0xffff, &entry_sel_text_bg_color);
     208        if (rc != EOK)
     209                goto error;
     210
     211        rc = gfx_color_new_rgb_i16(0xe4e4, 0xe4e4, 0xe4e4,
     212            &sbar_through_color);
    207213        if (rc != EOK)
    208214                goto error;
     
    240246        resource->entry_sel_text_fg_color = entry_sel_text_fg_color;
    241247        resource->entry_sel_text_bg_color = entry_sel_text_bg_color;
     248
     249        resource->sbar_through_color = sbar_through_color;
    242250
    243251        *rresource = resource;
     
    295303        if (entry_act_bg_color != NULL)
    296304                gfx_color_delete(entry_act_bg_color);
     305
     306        if (sbar_through_color != NULL)
     307                gfx_color_delete(sbar_through_color);
    297308
    298309        if (tface != NULL)
     
    338349        gfx_color_t *entry_sel_text_bg_color = NULL;
    339350        gfx_color_t *entry_act_bg_color = NULL;
     351        gfx_color_t *sbar_through_color = NULL;
    340352        errno_t rc;
    341353
     
    446458
    447459        rc = gfx_color_new_ega(0x37, &entry_act_bg_color);
     460        if (rc != EOK)
     461                goto error;
     462
     463        rc = gfx_color_new_ega(0x07, &sbar_through_color);
    448464        if (rc != EOK)
    449465                goto error;
     
    481497        resource->entry_sel_text_fg_color = entry_sel_text_fg_color;
    482498        resource->entry_sel_text_bg_color = entry_sel_text_bg_color;
     499
     500        resource->sbar_through_color = sbar_through_color;
    483501
    484502        *rresource = resource;
     
    536554        if (entry_sel_text_bg_color != NULL)
    537555                gfx_color_delete(entry_sel_text_bg_color);
     556        if (sbar_through_color != NULL)
     557                gfx_color_delete(sbar_through_color);
    538558
    539559        if (tface != NULL)
     
    594614        gfx_color_delete(resource->entry_sel_text_bg_color);
    595615
     616        gfx_color_delete(resource->sbar_through_color);
     617
    596618        gfx_font_close(resource->font);
    597619        gfx_typeface_destroy(resource->tface);
  • uspace/lib/ui/src/slider.c

    rb3b48f4 rbd16113  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2022 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6060        /** Slider button width in text mode */
    6161        ui_slider_btn_w_text = 3,
     62        /** Slider button height in text mode */
     63        ui_slider_btn_h_text = 1,
    6264        /** Slider button frame thickness */
    6365        ui_slider_btn_frame_thickness = 1,
     
    242244        rect->p0.x = pos.x;
    243245        rect->p0.y = pos.y;
    244         rect->p1.x = pos.x + ui_slider_btn_w;
    245         rect->p1.y = pos.y + ui_slider_btn_h;
     246
     247        if (slider->res->textmode) {
     248                rect->p1.x = pos.x + ui_slider_btn_w_text;
     249                rect->p1.y = pos.y + ui_slider_btn_h_text;
     250        } else {
     251                rect->p1.x = pos.x + ui_slider_btn_w;
     252                rect->p1.y = pos.y + ui_slider_btn_h;
     253        }
    246254}
    247255
Note: See TracChangeset for help on using the changeset viewer.