Ignore:
File:
1 edited

Legend:

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

    r2ab8ab3 rff6e91b  
    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        const char *gchar;
     335        size_t gcharsz;
     336        errno_t rc;
     337
     338        /* Paint slider groove */
     339
     340        pos = slider->rect.p0;
     341
     342        gfx_text_fmt_init(&fmt);
     343        fmt.color = slider->res->wnd_text_color;
     344        fmt.halign = gfx_halign_left;
     345        fmt.valign = gfx_valign_top;
     346
     347        w = slider->rect.p1.x - slider->rect.p0.x;
     348        gchar = "\u2550";
     349        gcharsz = str_size(gchar);
     350
     351        buf = malloc(w * gcharsz + 1);
     352        if (buf == NULL)
     353                return ENOMEM;
     354
     355        for (i = 0; i < w; i++)
     356                str_cpy(buf + i * gcharsz, (w - i) * gcharsz + 1, gchar);
     357        buf[w * gcharsz] = '\0';
     358
     359        rc = gfx_puttext(slider->res->font, &pos, &fmt, buf);
     360        free(buf);
     361        if (rc != EOK)
     362                goto error;
     363
     364        /* Paint slider button */
     365
     366        pos.x += slider->pos;
     367
     368        rc = gfx_puttext(slider->res->font, &pos, &fmt,
     369            "[O]");
     370        if (rc != EOK)
     371                goto error;
     372
     373        rc = gfx_update(slider->res->gc);
     374        if (rc != EOK)
     375                goto error;
     376
     377        return EOK;
     378error:
     379        return rc;
     380}
     381
     382/** Paint slider.
     383 *
     384 * @param slider Slider
     385 * @return EOK on success or an error code
     386 */
     387errno_t ui_slider_paint(ui_slider_t *slider)
     388{
     389        if (slider->res->textmode)
     390                return ui_slider_paint_text(slider);
     391        else
     392                return ui_slider_paint_gfx(slider);
     393}
     394
    317395/** Clear slider button.
    318396 *
     
    324402        gfx_rect_t rect;
    325403        errno_t rc;
     404
     405        /* No need to clear button in text mode */
     406        if (slider->res->textmode)
     407                return EOK;
    326408
    327409        ui_slider_btn_rect(slider, &rect);
Note: See TracChangeset for help on using the changeset viewer.