Changes in uspace/lib/gui/label.c [10cb47e:6d5e378] in mainline


Ignore:
File:
1 edited

Legend:

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

    r10cb47e r6d5e378  
    3636#include <str.h>
    3737#include <malloc.h>
     38
    3839#include <drawctx.h>
    3940#include <surface.h>
    40 #include <font/embedded.h>
    41 #include <errno.h>
     41
    4242#include "window.h"
    4343#include "label.h"
    4444
    45 static void paint_internal(widget_t *widget)
     45static void paint_internal(widget_t *w)
    4646{
    47         label_t *lbl = (label_t *) widget;
     47        label_t *lbl = (label_t *) w;
    4848
    4949        surface_t *surface = window_claim(lbl->widget.window);
    50         if (!surface)
     50        if (!surface) {
    5151                window_yield(lbl->widget.window);
    52        
     52        }
     53
    5354        drawctx_t drawctx;
     55
    5456        drawctx_init(&drawctx, surface);
    55        
    5657        drawctx_set_source(&drawctx, &lbl->background);
    57         drawctx_transfer(&drawctx, widget->hpos, widget->vpos, widget->width,
    58             widget->height);
    59        
     58        drawctx_transfer(&drawctx, w->hpos, w->vpos, w->width, w->height);
     59
    6060        sysarg_t cpt_width;
    6161        sysarg_t cpt_height;
    62         font_get_box(lbl->font, lbl->caption, &cpt_width, &cpt_height);
    63        
    64         if ((widget->width >= cpt_width) && (widget->height >= cpt_height)) {
    65                 sysarg_t x = ((widget->width - cpt_width) / 2) + widget->hpos;
    66                 sysarg_t y = ((widget->height - cpt_height) / 2) + widget->vpos;
    67                
    68                 drawctx_set_source(&drawctx, &lbl->text);
    69                 drawctx_set_font(&drawctx, lbl->font);
    70                
    71                 if (lbl->caption)
     62        font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
     63        if (w->width >= cpt_width && w->height >= cpt_height) {
     64                drawctx_set_source(&drawctx, &lbl->foreground);
     65                drawctx_set_font(&drawctx, &lbl->font);
     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) {
    7269                        drawctx_print(&drawctx, lbl->caption, x, y);
     70                }
    7371        }
    74        
     72
    7573        window_yield(lbl->widget.window);
    7674}
     
    8078        if (data != NULL) {
    8179                label_t *lbl = (label_t *) widget;
    82                
    8380                const char *new_caption = (const char *) data;
    8481                lbl->caption = str_dup(new_caption);
    85                
     82
    8683                sysarg_t cpt_width;
    8784                sysarg_t cpt_height;
    88                 font_get_box(lbl->font, lbl->caption, &cpt_width, &cpt_height);
    89                
     85                font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
    9086                lbl->widget.width_min = cpt_width + 4;
    9187                lbl->widget.height_min = cpt_height + 4;
    9288                lbl->widget.width_ideal = lbl->widget.width_min;
    9389                lbl->widget.height_ideal = lbl->widget.height_min;
    94                
     90
    9591                window_refresh(lbl->widget.window);
    9692        }
     
    10197        widget_deinit(&lbl->widget);
    10298        free(lbl->caption);
    103         font_release(lbl->font);
     99        font_release(&lbl->font);
    104100}
    105101
     
    107103{
    108104        label_t *lbl = (label_t *) widget;
     105
     106        deinit_label(lbl);
    109107       
    110         deinit_label(lbl);
    111108        free(lbl);
    112109}
     
    140137}
    141138
    142 bool init_label(label_t *lbl, widget_t *parent, const void *data,
    143     const char *caption, 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)
    144141{
    145         widget_init(&lbl->widget, parent, data);
    146        
     142        widget_init(&lbl->widget, parent);
     143
    147144        lbl->widget.destroy = label_destroy;
    148145        lbl->widget.reconfigure = label_reconfigure;
     
    151148        lbl->widget.handle_keyboard_event = label_handle_keyboard_event;
    152149        lbl->widget.handle_position_event = label_handle_position_event;
    153        
     150
    154151        source_init(&lbl->background);
    155152        source_set_color(&lbl->background, background);
    156        
    157         source_init(&lbl->text);
    158         source_set_color(&lbl->text, text);
    159        
    160         if (caption == NULL)
     153        source_init(&lbl->foreground);
     154        source_set_color(&lbl->foreground, foreground);
     155
     156        if (caption == NULL) {
    161157                lbl->caption = NULL;
    162         else
     158        } else {
    163159                lbl->caption = str_dup(caption);
    164        
    165         int rc = embedded_font_create(&lbl->font, points);
    166         if (rc != EOK) {
    167                 free(lbl->caption);
    168                 lbl->caption = NULL;
    169                 return false;
    170160        }
    171        
     161        font_init(&lbl->font, FONT_DECODER_EMBEDDED, NULL, points);
     162
    172163        sysarg_t cpt_width;
    173164        sysarg_t cpt_height;
    174         font_get_box(lbl->font, lbl->caption, &cpt_width, &cpt_height);
    175        
     165        font_get_box(&lbl->font, lbl->caption, &cpt_width, &cpt_height);
    176166        lbl->widget.width_min = cpt_width + 4;
    177167        lbl->widget.height_min = cpt_height + 4;
    178168        lbl->widget.width_ideal = lbl->widget.width_min;
    179169        lbl->widget.height_ideal = lbl->widget.height_min;
    180        
     170
    181171        lbl->rewrite = on_rewrite;
    182        
     172
    183173        return true;
    184174}
    185175
    186 label_t *create_label(widget_t *parent, const void *data, const char *caption,
    187     uint16_t points, 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)
    188178{
    189179        label_t *lbl = (label_t *) malloc(sizeof(label_t));
    190         if (!lbl)
     180        if (!lbl) {
    191181                return NULL;
    192        
    193         if (init_label(lbl, parent, data, caption, points, background, text))
     182        }
     183
     184        if (init_label(lbl, parent, caption, points, background, foreground)) {
    194185                return lbl;
    195        
    196         free(lbl);
    197         return NULL;
     186        } else {
     187                free(lbl);
     188                return NULL;
     189        }
    198190}
    199191
    200192/** @}
    201193 */
     194
Note: See TracChangeset for help on using the changeset viewer.