Changeset 47728678 in mainline for uspace/lib/ui/src/pbutton.c


Ignore:
Timestamp:
2020-10-13T09:24:56Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f6df5a3
Parents:
f80690a
git-author:
Jiri Svoboda <jiri@…> (2020-10-12 21:24:39)
git-committer:
Jiri Svoboda <jiri@…> (2020-10-13 09:24:56)
Message:

Push button - first light

Introduced ui_resource_t class to hold common UI resources such as font,
colors, etc. We don't want every button to load its own copy of the font.

File:
1 edited

Legend:

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

    rf80690a r47728678  
    3535
    3636#include <errno.h>
     37#include <gfx/color.h>
     38#include <gfx/context.h>
     39#include <gfx/render.h>
     40#include <gfx/text.h>
    3741#include <stdlib.h>
     42#include <str.h>
    3843#include <ui/pbutton.h>
    3944#include "../private/pbutton.h"
     45#include "../private/resource.h"
    4046
    4147/** Create new push button.
    4248 *
     49 * @param resource UI resource
    4350 * @param caption Caption
    4451 * @param rpbutton Place to store pointer to new push button
    4552 * @return EOK on success, ENOMEM if out of memory
    4653 */
    47 errno_t ui_pbutton_create(const char *caption, ui_pbutton_t **rpbutton)
     54errno_t ui_pbutton_create(ui_resource_t *resource, const char *caption,
     55    ui_pbutton_t **rpbutton)
    4856{
    4957        ui_pbutton_t *pbutton;
     
    5361                return ENOMEM;
    5462
    55         (void) caption;
     63        pbutton->caption = str_dup(caption);
     64        if (pbutton->caption == NULL) {
     65                free(pbutton);
     66                return ENOMEM;
     67        }
     68
     69        pbutton->res = resource;
    5670        *rpbutton = pbutton;
    5771        return EOK;
     
    7084}
    7185
     86/** Set button rectangle.
     87 *
     88 * @param pbutton Button
     89 * @param rect New button rectanle
     90 */
     91void ui_pbutton_set_rect(ui_pbutton_t *pbutton, gfx_rect_t *rect)
     92{
     93        pbutton->rect = *rect;
     94}
     95
     96/** Paint push button.
     97 *
     98 * @param pbutton Push button
     99 * @return EOK on success or an error code
     100 */
     101errno_t ui_pbutton_paint(ui_pbutton_t *pbutton)
     102{
     103        gfx_color_t *color = NULL;
     104        gfx_coord2_t pos;
     105        gfx_text_fmt_t fmt;
     106        errno_t rc;
     107
     108        rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &color);
     109        if (rc != EOK)
     110                goto error;
     111
     112        rc = gfx_set_color(pbutton->res->gc, color);
     113        if (rc != EOK)
     114                goto error;
     115
     116        rc = gfx_fill_rect(pbutton->res->gc, &pbutton->rect);
     117        if (rc != EOK)
     118                goto error;
     119
     120        gfx_color_delete(color);
     121
     122        rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
     123        if (rc != EOK)
     124                goto error;
     125
     126        rc = gfx_set_color(pbutton->res->gc, color);
     127        if (rc != EOK)
     128                goto error;
     129
     130        /* Center of button rectangle */
     131        pos.x = (pbutton->rect.p0.x + pbutton->rect.p1.x) / 2;
     132        pos.y = (pbutton->rect.p0.y + pbutton->rect.p1.y) / 2;
     133
     134        gfx_text_fmt_init(&fmt);
     135        fmt.halign = gfx_halign_center;
     136        fmt.valign = gfx_valign_center;
     137
     138        rc = gfx_puttext(pbutton->res->font, &pos, &fmt, pbutton->caption);
     139        if (rc != EOK)
     140                goto error;
     141
     142        gfx_color_delete(color);
     143
     144        return EOK;
     145error:
     146        if (color != NULL)
     147                gfx_color_delete(color);
     148        return rc;
     149}
     150
    72151/** @}
    73152 */
Note: See TracChangeset for help on using the changeset viewer.