Changeset 8009dc27 in mainline


Ignore:
Timestamp:
2020-10-31T01:03:26Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4df6607
Parents:
f03d1308
Message:

Prototype control base class and fixed layout class

So far only position event delivery is handled via layout

Location:
uspace
Files:
10 added
10 edited

Legend:

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

    rf03d1308 r8009dc27  
    4040#include <str.h>
    4141#include <task.h>
     42#include <ui/fixed.h>
    4243#include <ui/label.h>
    4344#include <ui/pbutton.h>
     
    8485
    8586        /* Make sure we don't process events until fully initialized */
    86         if (demo->pb1 == NULL || demo->pb2 == NULL)
     87        if (demo->fixed == NULL)
    8788                return;
    8889
    89         ui_pbutton_pos_event(demo->pb1, event);
    90         ui_pbutton_pos_event(demo->pb2, event);
     90        ui_fixed_pos_event(demo->fixed, event);
    9191}
    9292
     
    159159        ui_window_get_app_rect(window, &app_rect);
    160160
     161        rc = ui_fixed_create(&demo.fixed);
     162        if (rc != EOK) {
     163                printf("Error creating fixed layout.\n");
     164                return rc;
     165        }
     166
    161167        rc = ui_label_create(ui_res, "Hello there!", &demo.label);
    162168        if (rc != EOK) {
     
    172178        ui_label_set_halign(demo.label, gfx_halign_center);
    173179
     180        rc = ui_fixed_add(demo.fixed, ui_label_ctl(demo.label));
     181        if (rc != EOK) {
     182                printf("Error adding control to layout.\n");
     183                return rc;
     184        }
     185
    174186        rc = ui_pbutton_create(ui_res, "Confirm", &demo.pb1);
    175187        if (rc != EOK) {
     
    188200        ui_pbutton_set_default(demo.pb1, true);
    189201
     202        rc = ui_fixed_add(demo.fixed, ui_pbutton_ctl(demo.pb1));
     203        if (rc != EOK) {
     204                printf("Error adding control to layout.\n");
     205                return rc;
     206        }
     207
    190208        rc = ui_pbutton_create(ui_res, "Cancel", &demo.pb2);
    191209        if (rc != EOK) {
     
    202220        ui_pbutton_set_rect(demo.pb2, &rect);
    203221
     222        rc = ui_fixed_add(demo.fixed, ui_pbutton_ctl(demo.pb2));
     223        if (rc != EOK) {
     224                printf("Error adding control to layout.\n");
     225                return rc;
     226        }
     227
    204228        rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &color);
    205229        if (rc != EOK) {
     
    239263
    240264        ui_run(ui);
     265
     266        ui_fixed_remove(demo.fixed, ui_label_ctl(demo.label));
     267        ui_fixed_remove(demo.fixed, ui_pbutton_ctl(demo.pb1));
     268        ui_fixed_remove(demo.fixed, ui_pbutton_ctl(demo.pb2));
    241269
    242270        ui_pbutton_destroy(demo.pb1);
  • uspace/app/uidemo/uidemo.h

    rf03d1308 r8009dc27  
    3838
    3939#include <display.h>
     40#include <ui/fixed.h>
    4041#include <ui/label.h>
    4142#include <ui/pbutton.h>
     
    4748        ui_t *ui;
    4849        ui_window_t *window;
     50        ui_fixed_t *fixed;
    4951        ui_label_t *label;
    5052        ui_pbutton_t *pb1;
  • uspace/lib/ui/include/ui/label.h

    rf03d1308 r8009dc27  
    4040#include <gfx/coord.h>
    4141#include <gfx/text.h>
     42#include <types/ui/control.h>
    4243#include <types/ui/label.h>
    4344#include <types/ui/resource.h>
     
    4647    ui_label_t **);
    4748extern void ui_label_destroy(ui_label_t *);
     49extern ui_control_t *ui_label_ctl(ui_label_t *);
    4850extern void ui_label_set_rect(ui_label_t *, gfx_rect_t *);
    4951extern void ui_label_set_halign(ui_label_t *, gfx_halign_t);
  • uspace/lib/ui/include/ui/pbutton.h

    rf03d1308 r8009dc27  
    4040#include <gfx/coord.h>
    4141#include <io/pos_event.h>
     42#include <types/ui/control.h>
    4243#include <types/ui/event.h>
    4344#include <types/ui/pbutton.h>
     
    4849    ui_pbutton_t **);
    4950extern void ui_pbutton_destroy(ui_pbutton_t *);
     51extern ui_control_t *ui_pbutton_ctl(ui_pbutton_t *);
    5052extern void ui_pbutton_set_cb(ui_pbutton_t *, ui_pbutton_cb_t *, void *);
    5153extern void ui_pbutton_set_rect(ui_pbutton_t *, gfx_rect_t *);
  • uspace/lib/ui/meson.build

    rf03d1308 r8009dc27  
    2929deps = [ 'gfx', 'gfxfont', 'display' ]
    3030src = files(
     31        'src/control.c',
    3132        'src/dummygc.c',
     33        'src/fixed.c',
    3234        'src/label.c',
    3335        'src/paint.c',
     
    4042
    4143test_src = files(
     44        'test/control.c',
     45        'test/fixed.c',
    4246        'test/label.c',
    4347        'test/main.c',
  • uspace/lib/ui/private/label.h

    rf03d1308 r8009dc27  
    4646 */
    4747struct ui_label {
     48        /** Base control object */
     49        struct ui_control *control;
    4850        /** UI resource */
    4951        struct ui_resource *res;
  • uspace/lib/ui/private/pbutton.h

    rf03d1308 r8009dc27  
    4646 */
    4747struct ui_pbutton {
     48        /** Base control object */
     49        struct ui_control *control;
    4850        /** UI resource */
    4951        struct ui_resource *res;
  • uspace/lib/ui/src/label.c

    rf03d1308 r8009dc27  
    4040#include <stdlib.h>
    4141#include <str.h>
     42#include <ui/control.h>
    4243#include <ui/paint.h>
    4344#include <ui/label.h>
     
    4546#include "../private/resource.h"
    4647
     48static ui_evclaim_t ui_label_ctl_pos_event(void *, pos_event_t *);
     49
     50/** Label control ops */
     51ui_control_ops_t ui_label_ops = {
     52        .pos_event = ui_label_ctl_pos_event
     53};
     54
    4755/** Create new label.
    4856 *
     
    5664{
    5765        ui_label_t *label;
     66        errno_t rc;
    5867
    5968        label = calloc(1, sizeof(ui_label_t));
     
    6170                return ENOMEM;
    6271
     72        rc = ui_control_new(&ui_label_ops, (void *) label, &label->control);
     73        if (rc != EOK) {
     74                free(label);
     75                return rc;
     76        }
     77
    6378        label->text = str_dup(text);
    6479        if (label->text == NULL) {
     80                ui_control_delete(label->control);
    6581                free(label);
    6682                return ENOMEM;
     
    8298                return;
    8399
     100        ui_control_delete(label->control);
    84101        free(label);
     102}
     103
     104/** Get base control from label.
     105 *
     106 * @param label Label
     107 * @return Control
     108 */
     109ui_control_t *ui_label_ctl(ui_label_t *label)
     110{
     111        return label->control;
    85112}
    86113
     
    178205}
    179206
     207/** Handle label control position event.
     208 *
     209 * @param arg Argument (ui_label_t *)
     210 * @param pos_event Position event
     211 * @return @c ui_claimed iff the event is claimed
     212 */
     213ui_evclaim_t ui_label_ctl_pos_event(void *arg, pos_event_t *event)
     214{
     215        ui_label_t *label = (ui_label_t *) arg;
     216
     217        (void) label;
     218        return ui_unclaimed;
     219}
     220
    180221/** @}
    181222 */
  • uspace/lib/ui/src/pbutton.c

    rf03d1308 r8009dc27  
    4242#include <stdlib.h>
    4343#include <str.h>
     44#include <ui/control.h>
    4445#include <ui/paint.h>
    4546#include <ui/pbutton.h>
     
    5354};
    5455
     56static ui_evclaim_t ui_pbutton_ctl_pos_event(void *, pos_event_t *);
     57
     58/** Push button control ops */
     59ui_control_ops_t ui_pbutton_ops = {
     60        .pos_event = ui_pbutton_ctl_pos_event
     61};
     62
    5563/** Create new push button.
    5664 *
     
    6472{
    6573        ui_pbutton_t *pbutton;
     74        errno_t rc;
    6675
    6776        pbutton = calloc(1, sizeof(ui_pbutton_t));
     
    6978                return ENOMEM;
    7079
     80        rc = ui_control_new(&ui_pbutton_ops, (void *) pbutton,
     81            &pbutton->control);
     82        if (rc != EOK) {
     83                free(pbutton);
     84                return rc;
     85        }
     86
    7187        pbutton->caption = str_dup(caption);
    7288        if (pbutton->caption == NULL) {
     89                ui_control_delete(pbutton->control);
    7390                free(pbutton);
    7491                return ENOMEM;
     
    89106                return;
    90107
     108        ui_control_delete(pbutton->control);
    91109        free(pbutton);
     110}
     111
     112/** Get base control from push button.
     113 *
     114 * @param pbutton Push button
     115 * @return Control
     116 */
     117ui_control_t *ui_pbutton_ctl(ui_pbutton_t *pbutton)
     118{
     119        return pbutton->control;
    92120}
    93121
     
    388416}
    389417
     418/** Handle push button control position event.
     419 *
     420 * @param arg Argument (ui_pbutton_t *)
     421 * @param pos_event Position event
     422 * @return @c ui_claimed iff the event is claimed
     423 */
     424ui_evclaim_t ui_pbutton_ctl_pos_event(void *arg, pos_event_t *event)
     425{
     426        ui_pbutton_t *pbutton = (ui_pbutton_t *) arg;
     427
     428        return ui_pbutton_pos_event(pbutton, event);
     429}
     430
    390431/** @}
    391432 */
  • uspace/lib/ui/test/main.c

    rf03d1308 r8009dc27  
    3131PCUT_INIT;
    3232
     33PCUT_IMPORT(control);
     34PCUT_IMPORT(fixed);
    3335PCUT_IMPORT(label);
    3436PCUT_IMPORT(paint);
Note: See TracChangeset for help on using the changeset viewer.