Changeset 943f032 in mainline for uspace/lib/ui/src/slider.c


Ignore:
Timestamp:
2021-08-13T22:27:15Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
de0c55a
Parents:
ce0a5af
Message:

Slider text mode

File:
1 edited

Legend:

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

    rce0a5af r943f032  
    3838#include <gfx/context.h>
    3939#include <gfx/render.h>
     40#include <gfx/text.h>
    4041#include <io/pos_event.h>
    4142#include <stdlib.h>
     
    5758        /** Slider button height */
    5859        ui_slider_btn_h = 23,
     60        /** Slider button width in text mode */
     61        ui_slider_btn_w_text = 3,
    5962        /** Slider button frame thickness */
    6063        ui_slider_btn_frame_thickness = 1,
     
    251254{
    252255        gfx_coord2_t dims;
     256        gfx_coord_t w;
    253257
    254258        gfx_rect_dims(&slider->rect, &dims);
    255         return dims.x - ui_slider_btn_w;
    256 }
    257 
    258 /** Paint slider.
    259  *
    260  * @param slider Slider
    261  * @return EOK on success or an error code
    262  */
    263 errno_t ui_slider_paint(ui_slider_t *slider)
     259        w = slider->res->textmode ? ui_slider_btn_w_text :
     260            ui_slider_btn_w;
     261        return dims.x - w;
     262}
     263
     264/** Paint slider in graphics mode.
     265 *
     266 * @param slider Slider
     267 * @return EOK on success or an error code
     268 */
     269errno_t ui_slider_paint_gfx(ui_slider_t *slider)
    264270{
    265271        gfx_coord2_t pos;
     
    315321}
    316322
     323/** Paint slider in text mode.
     324 *
     325 * @param slider Slider
     326 * @return EOK on success or an error code
     327 */
     328errno_t ui_slider_paint_text(ui_slider_t *slider)
     329{
     330        gfx_coord2_t pos;
     331        gfx_text_fmt_t fmt;
     332        gfx_coord_t w, i;
     333        char *buf;
     334        errno_t rc;
     335
     336        /* Paint slider groove */
     337
     338        pos = slider->rect.p0;
     339
     340        gfx_text_fmt_init(&fmt);
     341        fmt.color = slider->res->wnd_text_color;
     342        fmt.halign = gfx_halign_left;
     343        fmt.valign = gfx_valign_top;
     344
     345        w = slider->rect.p1.x - slider->rect.p0.x;
     346        buf = malloc(w + 1);
     347        if (buf == NULL)
     348                return ENOMEM;
     349
     350        for (i = 0; i < w; i++)
     351                buf[i] = '=';
     352        buf[w] = '\0';
     353
     354        rc = gfx_puttext(slider->res->font, &pos, &fmt, buf);
     355        free(buf);
     356        if (rc != EOK)
     357                goto error;
     358
     359        /* Paint slider button */
     360
     361        pos.x += slider->pos;
     362
     363        rc = gfx_puttext(slider->res->font, &pos, &fmt,
     364            "[O]");
     365        if (rc != EOK)
     366                goto error;
     367
     368        rc = gfx_update(slider->res->gc);
     369        if (rc != EOK)
     370                goto error;
     371
     372        return EOK;
     373error:
     374        return rc;
     375}
     376
     377/** Paint slider.
     378 *
     379 * @param slider Slider
     380 * @return EOK on success or an error code
     381 */
     382errno_t ui_slider_paint(ui_slider_t *slider)
     383{
     384        if (slider->res->textmode)
     385                return ui_slider_paint_text(slider);
     386        else
     387                return ui_slider_paint_gfx(slider);
     388}
     389
    317390/** Clear slider button.
    318391 *
     
    324397        gfx_rect_t rect;
    325398        errno_t rc;
     399
     400        /* No need to clear button in text mode */
     401        if (slider->res->textmode)
     402                return EOK;
    326403
    327404        ui_slider_btn_rect(slider, &rect);
Note: See TracChangeset for help on using the changeset viewer.