Ignore:
File:
1 edited

Legend:

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

    r0eca788 r2ab8ab3  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3838#include <gfx/context.h>
    3939#include <gfx/render.h>
    40 #include <gfx/text.h>
    4140#include <io/pos_event.h>
    4241#include <stdlib.h>
     
    5857        /** Slider button height */
    5958        ui_slider_btn_h = 23,
    60         /** Slider button width in text mode */
    61         ui_slider_btn_w_text = 3,
    62         /** Slider button height in text mode */
    63         ui_slider_btn_h_text = 1,
    6459        /** Slider button frame thickness */
    6560        ui_slider_btn_frame_thickness = 1,
     
    8883 *
    8984 * @param resource UI resource
     85 * @param caption Caption
    9086 * @param rslider Place to store pointer to new slider
    9187 * @return EOK on success, ENOMEM if out of memory
    9288 */
    93 errno_t ui_slider_create(ui_resource_t *resource, ui_slider_t **rslider)
     89errno_t ui_slider_create(ui_resource_t *resource, const char *caption,
     90    ui_slider_t **rslider)
    9491{
    9592        ui_slider_t *slider;
     
    242239        rect->p0.x = pos.x;
    243240        rect->p0.y = pos.y;
    244 
    245         if (slider->res->textmode) {
    246                 rect->p1.x = pos.x + ui_slider_btn_w_text;
    247                 rect->p1.y = pos.y + ui_slider_btn_h_text;
    248         } else {
    249                 rect->p1.x = pos.x + ui_slider_btn_w;
    250                 rect->p1.y = pos.y + ui_slider_btn_h;
    251         }
     241        rect->p1.x = pos.x + ui_slider_btn_w;
     242        rect->p1.y = pos.y + ui_slider_btn_h;
    252243}
    253244
     
    260251{
    261252        gfx_coord2_t dims;
    262         gfx_coord_t w;
    263253
    264254        gfx_rect_dims(&slider->rect, &dims);
    265         w = slider->res->textmode ? ui_slider_btn_w_text :
    266             ui_slider_btn_w;
    267         return dims.x - w;
    268 }
    269 
    270 /** Paint slider in graphics mode.
     255        return dims.x - ui_slider_btn_w;
     256}
     257
     258/** Paint slider.
    271259 *
    272260 * @param slider Slider
    273261 * @return EOK on success or an error code
    274262 */
    275 errno_t ui_slider_paint_gfx(ui_slider_t *slider)
     263errno_t ui_slider_paint(ui_slider_t *slider)
    276264{
    277265        gfx_coord2_t pos;
     
    327315}
    328316
    329 /** Paint slider in text mode.
    330  *
    331  * @param slider Slider
    332  * @return EOK on success or an error code
    333  */
    334 errno_t ui_slider_paint_text(ui_slider_t *slider)
    335 {
    336         gfx_coord2_t pos;
    337         gfx_text_fmt_t fmt;
    338         gfx_coord_t w, i;
    339         char *buf;
    340         const char *gchar;
    341         size_t gcharsz;
    342         errno_t rc;
    343 
    344         /* Paint slider groove */
    345 
    346         pos = slider->rect.p0;
    347 
    348         gfx_text_fmt_init(&fmt);
    349         fmt.font = slider->res->font;
    350         fmt.color = slider->res->wnd_text_color;
    351         fmt.halign = gfx_halign_left;
    352         fmt.valign = gfx_valign_top;
    353 
    354         w = slider->rect.p1.x - slider->rect.p0.x;
    355         gchar = "\u2550";
    356         gcharsz = str_size(gchar);
    357 
    358         buf = malloc(w * gcharsz + 1);
    359         if (buf == NULL)
    360                 return ENOMEM;
    361 
    362         for (i = 0; i < w; i++)
    363                 str_cpy(buf + i * gcharsz, (w - i) * gcharsz + 1, gchar);
    364         buf[w * gcharsz] = '\0';
    365 
    366         rc = gfx_puttext(&pos, &fmt, buf);
    367         free(buf);
    368         if (rc != EOK)
    369                 goto error;
    370 
    371         /* Paint slider button */
    372 
    373         pos.x += slider->pos;
    374 
    375         rc = gfx_puttext(&pos, &fmt, "[O]");
    376         if (rc != EOK)
    377                 goto error;
    378 
    379         rc = gfx_update(slider->res->gc);
    380         if (rc != EOK)
    381                 goto error;
    382 
    383         return EOK;
    384 error:
    385         return rc;
    386 }
    387 
    388 /** Paint slider.
    389  *
    390  * @param slider Slider
    391  * @return EOK on success or an error code
    392  */
    393 errno_t ui_slider_paint(ui_slider_t *slider)
    394 {
    395         if (slider->res->textmode)
    396                 return ui_slider_paint_text(slider);
    397         else
    398                 return ui_slider_paint_gfx(slider);
    399 }
    400 
    401317/** Clear slider button.
    402318 *
     
    408324        gfx_rect_t rect;
    409325        errno_t rc;
    410 
    411         /* No need to clear button in text mode */
    412         if (slider->res->textmode)
    413                 return EOK;
    414326
    415327        ui_slider_btn_rect(slider, &rect);
     
    528440                ui_slider_update(slider, &pos);
    529441                break;
    530         case POS_DCLICK:
    531                 break;
    532442        }
    533443
Note: See TracChangeset for help on using the changeset viewer.