Changeset b433f68 in mainline


Ignore:
Timestamp:
2021-02-26T16:23:36Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
77ffa01
Parents:
fe40b67
Message:

Puttext needs to know the color of the text being printed

So far we were using the GC's current drawing color. But unless there
was a way to read it, we could not render text-mode text in the correct
color.

Location:
uspace
Files:
11 edited

Legend:

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

    rfe40b67 rb433f68  
    446446 * @param fedit Font editor
    447447 * @param x Starting X coordinate
    448  * @Param y Starting Y coordinate
     448 * @param y Starting Y coordinate
     449 * @param color Color
    449450 * @param str String
    450451 */
    451452static errno_t font_edit_paint_preview_str(font_edit_t *fedit,
    452     gfx_coord_t x, gfx_coord_t y, const char *str)
     453    gfx_coord_t x, gfx_coord_t y, gfx_color_t *color, const char *str)
    453454{
    454455        gfx_text_fmt_t fmt;
     
    456457
    457458        gfx_text_fmt_init(&fmt);
     459        fmt.color = color;
    458460
    459461        pos.x = x;
     
    480482                goto error;
    481483
    482         rc = font_edit_paint_preview_str(fedit, 20, 20,
     484        rc = font_edit_paint_preview_str(fedit, 20, 20, color,
    483485            "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    484486        if (rc != EOK)
    485487                goto error;
    486488
    487         rc = font_edit_paint_preview_str(fedit, 20, 40,
     489        rc = font_edit_paint_preview_str(fedit, 20, 40, color,
    488490            "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG");
    489491        if (rc != EOK)
    490492                goto error;
    491493
    492         rc = font_edit_paint_preview_str(fedit, 20, 60,
     494        rc = font_edit_paint_preview_str(fedit, 20, 60, color,
    493495            "abcdefghijklmnopqrstuvwxyz");
    494496        if (rc != EOK)
    495497                goto error;
    496498
    497         rc = font_edit_paint_preview_str(fedit, 20, 80,
     499        rc = font_edit_paint_preview_str(fedit, 20, 80, color,
    498500            "the quick brown fox jumps over the lazy dog");
    499501        if (rc != EOK)
    500502                goto error;
    501503
    502         rc = font_edit_paint_preview_str(fedit, 20, 100,
     504        rc = font_edit_paint_preview_str(fedit, 20, 100, color,
    503505            "0123456789,./<>?;'\\:\"|[]{}`~!@#$%^&*()-_=+");
    504506        if (rc != EOK)
  • uspace/app/gfxdemo/gfxdemo.c

    rfe40b67 rb433f68  
    556556                goto error;
    557557
    558         rc = gfx_set_color(gc, color);
    559         if (rc != EOK)
    560                 goto error;
    561 
    562558        gfx_text_fmt_init(&fmt);
     559        fmt.color = color;
    563560
    564561        pos.x = rect.p0.x;
     
    640637                        goto error;
    641638
    642                 rc = gfx_set_color(gc, color);
    643                 if (rc != EOK)
    644                         goto error;
     639                fmt.color = color;
    645640
    646641                pos.x = w / 20;
  • uspace/lib/gfxfont/include/types/gfx/text.h

    rfe40b67 rb433f68  
    3838
    3939#include <types/gfx/coord.h>
     40#include <types/gfx/color.h>
    4041
    4142/** Text horizontal alignment */
     
    6566/** Text formatting */
    6667typedef struct {
     68        /** Text color */
     69        gfx_color_t *color;
    6770        /** Horizontal alignment */
    6871        gfx_halign_t halign;
  • uspace/lib/gfxfont/src/text.c

    rfe40b67 rb433f68  
    3636#include <errno.h>
    3737#include <gfx/bitmap.h>
     38#include <gfx/color.h>
    3839#include <gfx/font.h>
    3940#include <gfx/glyph.h>
     41#include <gfx/render.h>
    4042#include <gfx/text.h>
    4143#include <io/pixelmap.h>
     
    9799 * @param font Font
    98100 * @param pos Position of top-left corner of text
     101 * @param color Text color
    99102 * @param str String
    100103 * @return EOK on success or an error code
    101104 */
    102105static errno_t gfx_puttext_textmode(gfx_font_t *font, gfx_coord2_t *pos,
    103     const char *str)
     106    gfx_color_t *color, const char *str)
    104107{
    105108        gfx_context_t *gc = font->typeface->gc;
     
    107110        gfx_bitmap_t *bitmap;
    108111        gfx_bitmap_alloc_t alloc;
     112        uint16_t r, g, b;
    109113        pixelmap_t pmap;
    110114        gfx_coord_t x;
     
    116120         * the most efficient way.
    117121         */
     122
     123        gfx_color_get_rgb_i16(color, &r, &g, &b);
     124
     125        /*
     126         * We are setting the *background* color, the foreground color
     127         * will be set to its complement.
     128         */
     129        r = 0xff ^ (r >> 8);
     130        g = 0xff ^ (g >> 8);
     131        b = 0xff ^ (b >> 8);
    118132
    119133        gfx_bitmap_params_init(&params);
     
    138152
    139153        for (x = 0; x < params.rect.p1.x; x++) {
    140                 pixel = PIXEL(str[x], 0xff, 0xff, 0xff);
     154                pixel = PIXEL(str[x], r, g, b);
    141155                pixelmap_put_pixel(&pmap, x, 0, pixel);
    142156        }
     
    206220        /* Text mode */
    207221        if ((font->finfo->props.flags & gff_text_mode) != 0)
    208                 return gfx_puttext_textmode(font, &cpos, str);
     222                return gfx_puttext_textmode(font, &cpos, fmt->color, str);
     223
     224        rc = gfx_set_color(font->typeface->gc, fmt->color);
     225        if (rc != EOK)
     226                return rc;
    209227
    210228        cp = str;
  • uspace/lib/gfxfont/test/text.c

    rfe40b67 rb433f68  
    2727 */
    2828
     29#include <gfx/color.h>
    2930#include <gfx/context.h>
    3031#include <gfx/font.h>
     
    110111        gfx_font_t *font;
    111112        gfx_context_t *gc;
     113        gfx_color_t *color;
    112114        gfx_text_fmt_t fmt;
    113115        gfx_coord2_t pos;
     
    118120        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    119121
     122        rc = gfx_color_new_rgb_i16(0, 0, 0, &color);
     123        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     124
    120125        rc = gfx_typeface_create(gc, &tface);
    121126        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     
    127132
    128133        gfx_text_fmt_init(&fmt);
     134        fmt.color = color;
    129135        pos.x = 0;
    130136        pos.y = 0;
     
    135141        gfx_font_close(font);
    136142        gfx_typeface_destroy(tface);
     143        gfx_color_delete(color);
    137144
    138145        rc = gfx_context_delete(gc);
  • uspace/lib/ui/src/checkbox.c

    rfe40b67 rb433f68  
    192192
    193193                gfx_text_fmt_init(&fmt);
     194                fmt.color = checkbox->res->entry_fg_color;
    194195                fmt.halign = gfx_halign_center;
    195196                fmt.valign = gfx_valign_center;
    196 
    197                 rc = gfx_set_color(checkbox->res->gc,
    198                     checkbox->res->entry_fg_color);
    199                 if (rc != EOK)
    200                         goto error;
    201197
    202198                rc = gfx_puttext(checkbox->res->font, &box_center, &fmt, "X");
     
    207203        /* Paint checkbox label */
    208204
    209         rc = gfx_set_color(checkbox->res->gc, checkbox->res->wnd_text_color);
    210         if (rc != EOK)
    211                 goto error;
    212 
    213         /* Label position */
    214205        pos.x = box_rect.p1.x + checkbox_label_margin;
    215206        pos.y = (box_rect.p0.y + box_rect.p1.y) / 2;
    216207
    217208        gfx_text_fmt_init(&fmt);
     209        fmt.color = checkbox->res->wnd_text_color;
    218210        fmt.halign = gfx_halign_left;
    219211        fmt.valign = gfx_valign_center;
  • uspace/lib/ui/src/entry.c

    rfe40b67 rb433f68  
    208208
    209209        gfx_text_fmt_init(&fmt);
     210        fmt.color = entry->res->entry_fg_color;
    210211        fmt.halign = entry->halign;
    211212        fmt.valign = gfx_valign_top;
    212 
    213         rc = gfx_set_color(entry->res->gc, entry->res->entry_fg_color);
    214         if (rc != EOK)
    215                 goto error;
    216213
    217214        rc = gfx_puttext(entry->res->font, &pos, &fmt, entry->text);
  • uspace/lib/ui/src/label.c

    rfe40b67 rb433f68  
    193193
    194194        gfx_text_fmt_init(&fmt);
     195        fmt.color = label->res->wnd_text_color;
    195196        fmt.halign = label->halign;
    196197        fmt.valign = gfx_valign_top;
    197 
    198         rc = gfx_set_color(label->res->gc, label->res->wnd_text_color);
    199         if (rc != EOK)
    200                 goto error;
    201198
    202199        rc = gfx_puttext(label->res->font, &pos, &fmt, label->text);
  • uspace/lib/ui/src/pbutton.c

    rfe40b67 rb433f68  
    269269                goto error;
    270270
    271         rc = gfx_set_color(pbutton->res->gc, pbutton->res->btn_text_color);
    272         if (rc != EOK)
    273                 goto error;
    274 
    275271        /* Center of button rectangle */
    276272        pos.x = (rect.p0.x + rect.p1.x) / 2;
     
    283279
    284280        gfx_text_fmt_init(&fmt);
     281        fmt.color = pbutton->res->btn_text_color;
    285282        fmt.halign = gfx_halign_center;
    286283        fmt.valign = gfx_valign_center;
  • uspace/lib/ui/src/rbutton.c

    rfe40b67 rb433f68  
    274274        /* Paint rbutton label */
    275275
    276         rc = gfx_set_color(rbutton->group->res->gc,
    277             rbutton->group->res->wnd_text_color);
    278         if (rc != EOK)
    279                 goto error;
    280 
    281         /* Label position */
    282276        pos.x = center.x + rbutton_oframe_r + rbutton_label_margin;
    283277        pos.y = center.y;
    284278
    285279        gfx_text_fmt_init(&fmt);
     280        fmt.color = rbutton->group->res->wnd_text_color;
    286281        fmt.halign = gfx_halign_left;
    287282        fmt.valign = gfx_valign_center;
  • uspace/lib/ui/src/wdecor.c

    rfe40b67 rb433f68  
    213213
    214214                gfx_text_fmt_init(&fmt);
     215                fmt.color = wdecor->active ?
     216                    wdecor->res->tbar_act_text_color :
     217                    wdecor->res->tbar_inact_text_color;
    215218                fmt.halign = gfx_halign_center;
    216219                fmt.valign = gfx_valign_center;
     
    218221                pos.x = (trect.p0.x + trect.p1.x) / 2;
    219222                pos.y = (trect.p0.y + trect.p1.y) / 2;
    220 
    221                 rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
    222                     wdecor->res->tbar_act_text_color :
    223                     wdecor->res->tbar_inact_text_color);
    224                 if (rc != EOK)
    225                         return rc;
    226223
    227224                rc = gfx_puttext(wdecor->res->font, &pos, &fmt, wdecor->caption);
Note: See TracChangeset for help on using the changeset viewer.