Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/gui/label.c

    r296e124e r6d5e378  
    3636#include <str.h>
    3737#include <malloc.h>
     38
    3839#include <drawctx.h>
    3940#include <surface.h>
     41
    4042#include "window.h"
    4143#include "label.h"
    4244
    43 static void paint_internal(widget_t *widget)
     45static void paint_internal(widget_t *w)
    4446{
    45         label_t *lbl = (label_t *) widget;
     47        label_t *lbl = (label_t *) w;
    4648
    4749        surface_t *surface = window_claim(lbl->widget.window);
    48         if (!surface)
     50        if (!surface) {
    4951                window_yield(lbl->widget.window);
    50        
     52        }
     53
    5154        drawctx_t drawctx;
     55
    5256        drawctx_init(&drawctx, surface);
    53        
    5457        drawctx_set_source(&drawctx, &lbl->background);
    55         drawctx_transfer(&drawctx, widget->hpos, widget->vpos, widget->width,
    56             widget->height);
    57        
     58        drawctx_transfer(&drawctx, w->hpos, w->vpos, w->width, w->height);
     59
    5860        sysarg_t cpt_width;
    5961        sysarg_t cpt_height;
    6062        font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
    61        
    62         if ((widget->width >= cpt_width) && (widget->height >= cpt_height)) {
    63                 sysarg_t x = ((widget->width - cpt_width) / 2) + widget->hpos;
    64                 sysarg_t y = ((widget->height - cpt_height) / 2) + widget->vpos;
    65                
    66                 drawctx_set_source(&drawctx, &lbl->text);
     63        if (w->width >= cpt_width && w->height >= cpt_height) {
     64                drawctx_set_source(&drawctx, &lbl->foreground);
    6765                drawctx_set_font(&drawctx, &lbl->font);
    68                
    69                 if (lbl->caption)
     66                sysarg_t x = ((w->width - cpt_width) / 2) + w->hpos;
     67                sysarg_t y = ((w->height - cpt_height) / 2) + w->vpos;
     68                if (lbl->caption) {
    7069                        drawctx_print(&drawctx, lbl->caption, x, y);
     70                }
    7171        }
    72        
     72
    7373        window_yield(lbl->widget.window);
    7474}
     
    7878        if (data != NULL) {
    7979                label_t *lbl = (label_t *) widget;
    80                
    8180                const char *new_caption = (const char *) data;
    8281                lbl->caption = str_dup(new_caption);
    83                
     82
    8483                sysarg_t cpt_width;
    8584                sysarg_t cpt_height;
    8685                font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
    87                
    8886                lbl->widget.width_min = cpt_width + 4;
    8987                lbl->widget.height_min = cpt_height + 4;
    9088                lbl->widget.width_ideal = lbl->widget.width_min;
    9189                lbl->widget.height_ideal = lbl->widget.height_min;
    92                
     90
    9391                window_refresh(lbl->widget.window);
    9492        }
     
    105103{
    106104        label_t *lbl = (label_t *) widget;
     105
     106        deinit_label(lbl);
    107107       
    108         deinit_label(lbl);
    109108        free(lbl);
    110109}
     
    138137}
    139138
    140 bool init_label(label_t *lbl, widget_t *parent, const char *caption,
    141     uint16_t points, pixel_t background, pixel_t text)
     139bool init_label(label_t *lbl, widget_t *parent,
     140    const char *caption, uint16_t points, pixel_t background, pixel_t foreground)
    142141{
    143142        widget_init(&lbl->widget, parent);
    144        
     143
    145144        lbl->widget.destroy = label_destroy;
    146145        lbl->widget.reconfigure = label_reconfigure;
     
    149148        lbl->widget.handle_keyboard_event = label_handle_keyboard_event;
    150149        lbl->widget.handle_position_event = label_handle_position_event;
    151        
     150
    152151        source_init(&lbl->background);
    153152        source_set_color(&lbl->background, background);
    154        
    155         source_init(&lbl->text);
    156         source_set_color(&lbl->text, text);
    157        
    158         if (caption == NULL)
     153        source_init(&lbl->foreground);
     154        source_set_color(&lbl->foreground, foreground);
     155
     156        if (caption == NULL) {
    159157                lbl->caption = NULL;
    160         else
     158        } else {
    161159                lbl->caption = str_dup(caption);
    162        
     160        }
    163161        font_init(&lbl->font, FONT_DECODER_EMBEDDED, NULL, points);
    164        
     162
    165163        sysarg_t cpt_width;
    166164        sysarg_t cpt_height;
    167165        font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
    168        
    169166        lbl->widget.width_min = cpt_width + 4;
    170167        lbl->widget.height_min = cpt_height + 4;
    171168        lbl->widget.width_ideal = lbl->widget.width_min;
    172169        lbl->widget.height_ideal = lbl->widget.height_min;
    173        
     170
    174171        lbl->rewrite = on_rewrite;
    175        
     172
    176173        return true;
    177174}
    178175
    179 label_t *create_label(widget_t *parent, const char *caption, uint16_t points,
    180     pixel_t background, pixel_t text)
     176label_t *create_label(widget_t *parent,
     177    const char *caption, uint16_t points, pixel_t background, pixel_t foreground)
    181178{
    182179        label_t *lbl = (label_t *) malloc(sizeof(label_t));
    183         if (!lbl)
     180        if (!lbl) {
    184181                return NULL;
    185        
    186         if (init_label(lbl, parent, caption, points, background, text))
     182        }
     183
     184        if (init_label(lbl, parent, caption, points, background, foreground)) {
    187185                return lbl;
    188        
    189         free(lbl);
    190         return NULL;
     186        } else {
     187                free(lbl);
     188                return NULL;
     189        }
    191190}
    192191
    193192/** @}
    194193 */
     194
Note: See TracChangeset for help on using the changeset viewer.