Changeset 4df6607 in mainline


Ignore:
Timestamp:
2020-11-01T18:37:09Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c6f00b40
Parents:
8009dc27
Message:

Paint controls via layout

Location:
uspace
Files:
10 edited

Legend:

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

    r8009dc27 r4df6607  
    244244        }
    245245
    246         rc = ui_label_paint(demo.label);
    247         if (rc != EOK) {
    248                 printf("Error painting button.\n");
    249                 return rc;
    250         }
    251 
    252         rc = ui_pbutton_paint(demo.pb1);
    253         if (rc != EOK) {
    254                 printf("Error painting button.\n");
    255                 return rc;
    256         }
    257 
    258         rc = ui_pbutton_paint(demo.pb2);
    259         if (rc != EOK) {
    260                 printf("Error painting button.\n");
     246        rc = ui_fixed_paint(demo.fixed);
     247        if (rc != EOK) {
     248                printf("Error painting UI controls.\n");
    261249                return rc;
    262250        }
  • uspace/lib/ui/include/types/ui/control.h

    r8009dc27 r4df6607  
    3737#define _UI_TYPES_CONTROL_H
    3838
     39#include <errno.h>
    3940#include <io/pos_event.h>
    4041#include <types/ui/event.h>
     
    4546/** UI control ops */
    4647typedef struct ui_control_ops {
     48        /** Paint */
     49        errno_t (*paint)(void *);
    4750        /** Position event */
    4851        ui_evclaim_t (*pos_event)(void *, pos_event_t *);
  • uspace/lib/ui/include/ui/control.h

    r8009dc27 r4df6607  
    4444extern errno_t ui_control_new(ui_control_ops_t *, void *, ui_control_t **);
    4545extern void ui_control_delete(ui_control_t *);
     46extern errno_t ui_control_paint(ui_control_t *);
    4647extern ui_evclaim_t ui_control_pos_event(ui_control_t *, pos_event_t *);
    4748
  • uspace/lib/ui/include/ui/fixed.h

    r8009dc27 r4df6607  
    4747extern errno_t ui_fixed_add(ui_fixed_t *, ui_control_t *);
    4848extern void ui_fixed_remove(ui_fixed_t *, ui_control_t *);
     49extern errno_t ui_fixed_paint(ui_fixed_t *);
    4950extern ui_evclaim_t ui_fixed_pos_event(ui_fixed_t *, pos_event_t *);
    5051
  • uspace/lib/ui/src/control.c

    r8009dc27 r4df6607  
    7474}
    7575
     76/** Paint UI control.
     77 *
     78 * @param control Push button
     79 * @return EOK on success or an error code
     80 */
     81errno_t ui_control_paint(ui_control_t *control)
     82{
     83        return control->ops->paint(control->ext);
     84}
     85
    7686/** Deliver position event to UI control.
    7787 *
  • uspace/lib/ui/src/fixed.c

    r8009dc27 r4df6607  
    147147}
    148148
     149/** Paint fixed layout.
     150 *
     151 * @param fixed Fixed layout
     152 * @return EOK on success or an error code
     153 */
     154errno_t ui_fixed_paint(ui_fixed_t *fixed)
     155{
     156        ui_fixed_elem_t *elem;
     157        errno_t rc;
     158
     159        elem = ui_fixed_first(fixed);
     160        while (elem != NULL) {
     161                rc = ui_control_paint(elem->control);
     162                if (rc != EOK)
     163                        return rc;
     164
     165                elem = ui_fixed_next(elem);
     166        }
     167
     168        return EOK;
     169}
     170
    149171/** Handle fixed layout position event.
    150172 *
  • uspace/lib/ui/src/label.c

    r8009dc27 r4df6607  
    4646#include "../private/resource.h"
    4747
     48static errno_t ui_label_ctl_paint(void *);
    4849static ui_evclaim_t ui_label_ctl_pos_event(void *, pos_event_t *);
    4950
    5051/** Label control ops */
    5152ui_control_ops_t ui_label_ops = {
     53        .paint = ui_label_ctl_paint,
    5254        .pos_event = ui_label_ctl_pos_event
    5355};
     
    205207}
    206208
     209/** Paint lable control.
     210 *
     211 * @param arg Argument (ui_label_t *)
     212 * @return EOK on success or an error code
     213 */
     214errno_t ui_label_ctl_paint(void *arg)
     215{
     216        ui_label_t *label = (ui_label_t *) arg;
     217
     218        return ui_label_paint(label);
     219}
     220
    207221/** Handle label control position event.
    208222 *
  • uspace/lib/ui/src/pbutton.c

    r8009dc27 r4df6607  
    5454};
    5555
     56static errno_t ui_pbutton_ctl_paint(void *);
    5657static ui_evclaim_t ui_pbutton_ctl_pos_event(void *, pos_event_t *);
    5758
    5859/** Push button control ops */
    5960ui_control_ops_t ui_pbutton_ops = {
     61        .paint = ui_pbutton_ctl_paint,
    6062        .pos_event = ui_pbutton_ctl_pos_event
    6163};
     
    416418}
    417419
     420/** Paint push button control.
     421 *
     422 * @param arg Argument (ui_pbutton_t *)
     423 * @return EOK on success or an error code
     424 */
     425errno_t ui_pbutton_ctl_paint(void *arg)
     426{
     427        ui_pbutton_t *pbutton = (ui_pbutton_t *) arg;
     428
     429        return ui_pbutton_paint(pbutton);
     430}
     431
    418432/** Handle push button control position event.
    419433 *
  • uspace/lib/ui/test/control.c

    r8009dc27 r4df6607  
    2727 */
    2828
     29#include <errno.h>
    2930#include <mem.h>
    3031#include <io/pos_event.h>
     
    3839PCUT_TEST_SUITE(control);
    3940
     41static errno_t test_ctl_paint(void *);
    4042static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *);
    4143
    4244static ui_control_ops_t test_ctl_ops = {
     45        .paint = test_ctl_paint,
    4346        .pos_event = test_ctl_pos_event
    4447};
     
    4851        /** Claim to return */
    4952        ui_evclaim_t claim;
     53        /** Result code to return */
     54        errno_t rc;
     55
     56        /** @c true iff paint was called */
     57        bool paint;
    5058
    5159        /** @c true iff pos_event was called */
     
    7280{
    7381        ui_control_delete(NULL);
     82}
     83
     84/** Test sending paint request to control */
     85PCUT_TEST(paint)
     86{
     87        ui_control_t *control = NULL;
     88        test_resp_t resp;
     89        errno_t rc;
     90
     91        rc = ui_control_new(&test_ctl_ops, &resp, &control);
     92        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     93        PCUT_ASSERT_NOT_NULL(control);
     94
     95        resp.rc = EOK;
     96        resp.paint = false;
     97
     98        rc = ui_control_paint(control);
     99        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     100        PCUT_ASSERT_TRUE(resp.paint);
     101
     102        resp.rc = EINVAL;
     103        resp.paint = false;
     104
     105        rc = ui_control_paint(control);
     106        PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
     107        PCUT_ASSERT_TRUE(resp.paint);
     108
     109        ui_control_delete(control);
    74110}
    75111
     
    107143}
    108144
     145static errno_t test_ctl_paint(void *arg)
     146{
     147        test_resp_t *resp = (test_resp_t *) arg;
     148
     149        resp->paint = true;
     150        return resp->rc;
     151}
     152
    109153static ui_evclaim_t test_ctl_pos_event(void *arg, pos_event_t *event)
    110154{
  • uspace/lib/ui/test/fixed.c

    r8009dc27 r4df6607  
    2727 */
    2828
     29#include <errno.h>
    2930#include <pcut/pcut.h>
    3031#include <stddef.h>
     
    3738PCUT_TEST_SUITE(fixed);
    3839
     40static errno_t test_ctl_paint(void *);
    3941static ui_evclaim_t test_ctl_pos_event(void *, pos_event_t *);
    4042
    4143static ui_control_ops_t test_ctl_ops = {
     44        .paint = test_ctl_paint,
    4245        .pos_event = test_ctl_pos_event
    4346};
     
    4750        /** Claim to return */
    4851        ui_evclaim_t claim;
     52        /** Result code to return */
     53        errno_t rc;
     54
     55        /** @c true iff paint was called */
     56        bool paint;
    4957
    5058        /** @c true iff pos_event was called */
     
    107115}
    108116
    109 /** ui_pos_event() delivers position event to control */
     117/** ui_fixed_paint() delivers paint request to control */
     118PCUT_TEST(paint)
     119{
     120        ui_fixed_t *fixed = NULL;
     121        ui_control_t *control;
     122        test_resp_t resp;
     123        errno_t rc;
     124
     125        rc = ui_fixed_create(&fixed);
     126        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     127
     128        rc = ui_control_new(&test_ctl_ops, (void *) &resp, &control);
     129        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     130
     131        rc = ui_fixed_add(fixed, control);
     132        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     133
     134        resp.paint = false;
     135        resp.rc = EOK;
     136
     137        rc = ui_fixed_paint(fixed);
     138        PCUT_ASSERT_EQUALS(resp.rc, rc);
     139        PCUT_ASSERT_TRUE(resp.paint);
     140
     141        resp.paint = false;
     142        resp.rc = EINVAL;
     143
     144        rc = ui_fixed_paint(fixed);
     145        PCUT_ASSERT_EQUALS(resp.rc, rc);
     146        PCUT_ASSERT_TRUE(resp.paint);
     147
     148        ui_fixed_remove(fixed, control);
     149        ui_fixed_destroy(fixed);
     150}
     151
     152/** ui_fixed_pos_event() delivers position event to control */
    110153PCUT_TEST(pos_event)
    111154{
     
    147190}
    148191
     192static errno_t test_ctl_paint(void *arg)
     193{
     194        test_resp_t *resp = (test_resp_t *) arg;
     195
     196        resp->paint = true;
     197        return resp->rc;
     198}
     199
    149200static ui_evclaim_t test_ctl_pos_event(void *arg, pos_event_t *event)
    150201{
Note: See TracChangeset for help on using the changeset viewer.