Changeset 0e5ed803 in mainline for uspace/app/nav/panel.c


Ignore:
Timestamp:
2021-10-04T20:39:24Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Children:
3b67e95
Parents:
68b9e540
Message:

Create, position panels and paint boxes around them

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nav/panel.c

    r68b9e540 r0e5ed803  
    3636
    3737#include <errno.h>
     38#include <gfx/render.h>
    3839#include <stdlib.h>
     40#include <ui/control.h>
     41#include <ui/paint.h>
    3942#include "panel.h"
    4043#include "nav.h"
    4144
     45static void panel_ctl_destroy(void *);
     46static errno_t panel_ctl_paint(void *);
     47static ui_evclaim_t panel_ctl_pos_event(void *, pos_event_t *);
     48
     49/** Panel control ops */
     50ui_control_ops_t panel_ctl_ops = {
     51        .destroy = panel_ctl_destroy,
     52        .paint = panel_ctl_paint,
     53        .pos_event = panel_ctl_pos_event
     54};
     55
    4256/** Create panel.
    4357 *
     58 * @param window Containing window
    4459 * @param rpanel Place to store pointer to new panel
    4560 * @return EOK on success or an error code
    4661 */
    47 errno_t panel_create(panel_t **rpanel)
     62errno_t panel_create(ui_window_t *window, panel_t **rpanel)
    4863{
    4964        panel_t *panel;
     65        errno_t rc;
    5066
    5167        panel = calloc(1, sizeof(panel_t));
     
    5369                return ENOMEM;
    5470
     71        rc = ui_control_new(&panel_ctl_ops, (void *)panel,
     72            &panel->control);
     73        if (rc != EOK) {
     74                free(panel);
     75                return rc;
     76        }
     77
     78        rc = gfx_color_new_ega(0x07, &panel->color);
     79        if (rc != EOK)
     80                goto error;
     81
     82        panel->window = window;
    5583        *rpanel = panel;
    5684        return EOK;
     85error:
     86        ui_control_delete(panel->control);
     87        free(panel);
     88        return rc;
    5789}
    5890
     
    6395void panel_destroy(panel_t *panel)
    6496{
     97        ui_control_delete(panel->control);
    6598        free(panel);
    6699}
    67100
     101/** Paint panel.
     102 *
     103 * @param panel Panel
     104 */
     105errno_t panel_paint(panel_t *panel)
     106{
     107        gfx_context_t *gc = ui_window_get_gc(panel->window);
     108        ui_resource_t *res = ui_window_get_res(panel->window);
     109        errno_t rc;
     110
     111        rc = gfx_set_color(gc, panel->color);
     112        if (rc != EOK)
     113                return rc;
     114
     115        rc = gfx_fill_rect(gc, &panel->rect);
     116        if (rc != EOK)
     117                return rc;
     118
     119        rc = ui_paint_text_box(res, &panel->rect, ui_box_single,
     120            panel->color);
     121        if (rc != EOK)
     122                return rc;
     123
     124        rc = gfx_update(gc);
     125        if (rc != EOK)
     126                return rc;
     127
     128        return EOK;
     129}
     130
     131/** Handle panel position event.
     132 *
     133 * @param panel Panel
     134 * @param event Position event
     135 * @return ui_claimed iff event was claimed
     136 */
     137ui_evclaim_t panel_pos_event(panel_t *panel, pos_event_t *event)
     138{
     139        return ui_unclaimed;
     140}
     141
     142/** Get base control for panel.
     143 *
     144 * @param panel Panel
     145 * @return Base UI control
     146 */
     147ui_control_t *panel_ctl(panel_t *panel)
     148{
     149        return panel->control;
     150}
     151
     152/** Set panel rectangle.
     153 *
     154 * @param panel Panel
     155 * @param rect Rectangle
     156 */
     157void panel_set_rect(panel_t *panel, gfx_rect_t *rect)
     158{
     159        panel->rect = *rect;
     160}
     161
     162/** Destroy panel control.
     163 *
     164 * @param arg Argument (panel_t *)
     165 */
     166void panel_ctl_destroy(void *arg)
     167{
     168        panel_t *panel = (panel_t *) arg;
     169
     170        panel_destroy(panel);
     171}
     172
     173/** Paint panel control.
     174 *
     175 * @param arg Argument (panel_t *)
     176 * @return EOK on success or an error code
     177 */
     178errno_t panel_ctl_paint(void *arg)
     179{
     180        panel_t *panel = (panel_t *) arg;
     181
     182        return panel_paint(panel);
     183}
     184
     185/** Handle panel control position event.
     186 *
     187 * @param arg Argument (panel_t *)
     188 * @param pos_event Position event
     189 * @return @c ui_claimed iff the event is claimed
     190 */
     191ui_evclaim_t panel_ctl_pos_event(void *arg, pos_event_t *event)
     192{
     193        panel_t *panel = (panel_t *) arg;
     194
     195        return panel_pos_event(panel, event);
     196}
     197
     198
    68199/** @}
    69200 */
Note: See TracChangeset for help on using the changeset viewer.