Changeset 0d62c10 in mainline


Ignore:
Timestamp:
2020-10-09T20:27:24Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f80690a
Parents:
8bf9058
Message:

Rendering text in different colors via colorization

Location:
uspace
Files:
10 edited

Legend:

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

    r8bf9058 r0d62c10  
    590590                goto error;
    591591
     592        gfx_color_delete(color);
     593
    592594        gfx_text_fmt_init(&fmt);
    593595
    594596        for (i = 0; i < 8; i++) {
     597                rc = gfx_color_new_rgb_i16((i & 4) ? 0xffff : 0,
     598                    (i & 2) ? 0xffff : 0, (i & 1) ? 0xffff : 0, &color);
     599                if (rc != EOK)
     600                        goto error;
     601
     602                rc = gfx_set_color(gc, color);
     603                if (rc != EOK)
     604                        goto error;
     605
    595606                pos.x = w / 20;
    596607                pos.y = (7 + i) * h / 15;
     
    598609                if (rc != EOK)
    599610                        goto error;
     611
     612                gfx_color_delete(color);
    600613        }
    601614
     
    605618                        break;
    606619        }
    607 
    608         gfx_color_delete(color);
    609620
    610621        gfx_font_close(font);
  • uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.c

    r8bf9058 r0d62c10  
    383383
    384384        /* Check that we support all required flags */
    385         if ((params->flags & ~bmpf_color_key) != 0)
     385        if ((params->flags & ~(bmpf_color_key | bmpf_colorize)) != 0)
    386386                return ENOTSUP;
    387387
     
    392392        gfx_coord2_subtract(&params->rect.p1, &params->rect.p0, &dim);
    393393        dcbm->rect = params->rect;
     394        dcbm->flags = params->flags;
    394395
    395396        if (alloc == NULL) {
     
    487488        gfx_rect_clip(&srect, &skfbrect, &crect);
    488489
    489         // XXX bmpf_color_key
    490         for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
    491                 for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
    492                         gfx_coord2_subtract(&pos, &dcbm->rect.p0, &sp);
    493                         gfx_coord2_add(&pos, &offs, &dp);
    494 
    495                         color = pixelmap_get_pixel(&pbm, sp.x, sp.y);
    496                         dispc->active_fb.pixel2visual(dispc->fb_data +
    497                             FB_POS(dispc, dp.x, dp.y), color);
     490        if ((dcbm->flags & bmpf_color_key) == 0) {
     491                /* Simple copy */
     492                for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
     493                        for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
     494                                gfx_coord2_subtract(&pos, &dcbm->rect.p0, &sp);
     495                                gfx_coord2_add(&pos, &offs, &dp);
     496
     497                                color = pixelmap_get_pixel(&pbm, sp.x, sp.y);
     498                                dispc->active_fb.pixel2visual(dispc->fb_data +
     499                                    FB_POS(dispc, dp.x, dp.y), color);
     500                        }
     501                }
     502        } else if ((dcbm->flags & bmpf_colorize) == 0) {
     503                /* Color key */
     504                for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
     505                        for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
     506                                gfx_coord2_subtract(&pos, &dcbm->rect.p0, &sp);
     507                                gfx_coord2_add(&pos, &offs, &dp);
     508
     509                                color = pixelmap_get_pixel(&pbm, sp.x, sp.y);
     510                                if (color != dcbm->key_color) {
     511                                        dispc->active_fb.pixel2visual(dispc->fb_data +
     512                                            FB_POS(dispc, dp.x, dp.y), color);
     513                                }
     514                        }
     515                }
     516        } else {
     517                /* Color key & colorize */
     518                for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
     519                        for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
     520                                gfx_coord2_subtract(&pos, &dcbm->rect.p0, &sp);
     521                                gfx_coord2_add(&pos, &offs, &dp);
     522
     523                                color = pixelmap_get_pixel(&pbm, sp.x, sp.y);
     524                                if (color != dcbm->key_color) {
     525                                        dispc->active_fb.pixel2visual(dispc->fb_data +
     526                                            FB_POS(dispc, dp.x, dp.y),
     527                                            dcbm->dispc->color);
     528                                }
     529                        }
    498530                }
    499531        }
  • uspace/drv/fb/amdm37x_dispc/amdm37x_dispc.h

    r8bf9058 r0d62c10  
    6868
    6969typedef struct {
     70        /* Containing display controller */
    7071        amdm37x_dispc_t *dispc;
     72        /** Allocation info */
    7173        gfx_bitmap_alloc_t alloc;
     74        /** @c true if we allocated the bitmap, @c false if allocated by caller */
     75        bool myalloc;
     76        /** Rectangle covered by bitmap */
    7277        gfx_rect_t rect;
    73         bool myalloc;
     78        /** Bitmap flags */
     79        gfx_bitmap_flags_t flags;
     80        /** Key color */
     81        pixel_t key_color;
    7482} amdm37x_bitmap_t;
    7583
  • uspace/drv/fb/kfb/port.c

    r8bf9058 r0d62c10  
    200200
    201201        /* Check that we support all required flags */
    202         if ((params->flags & ~bmpf_color_key) != 0)
     202        if ((params->flags & ~(bmpf_color_key | bmpf_colorize)) != 0)
    203203                return ENOTSUP;
    204204
     
    307307
    308308        if ((kfbbm->flags & bmpf_color_key) != 0) {
     309                /* Simple copy */
    309310                for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
    310311                        for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
     
    319320                        }
    320321                }
     322        } else if ((kfbbm->flags & bmpf_colorize) != 0) {
     323                /* Color key */
     324                for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
     325                        for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
     326                                gfx_coord2_subtract(&pos, &kfbbm->rect.p0, &sp);
     327                                gfx_coord2_add(&pos, &offs, &dp);
     328
     329                                color = pixelmap_get_pixel(&pbm, sp.x, sp.y);
     330                                kfb->pixel2visual(kfb->addr +
     331                                    FB_POS(kfb, dp.x, dp.y), color);
     332                        }
     333                }
    321334        } else {
     335                /* Color key & colorize */
    322336                for (pos.y = crect.p0.y; pos.y < crect.p1.y; pos.y++) {
    323337                        for (pos.x = crect.p0.x; pos.x < crect.p1.x; pos.x++) {
  • uspace/lib/congfx/src/console.c

    r8bf9058 r0d62c10  
    207207
    208208        /* Check that we support all requested flags */
    209         if ((params->flags & ~bmpf_color_key) != 0)
     209        if ((params->flags & ~(bmpf_color_key | bmpf_colorize)) != 0)
    210210                return ENOTSUP;
    211211
     
    296296
    297297        if ((cbm->flags & bmpf_color_key) == 0) {
     298                /* Simple copy */
    298299                for (y = crect.p0.y; y < crect.p1.y; y++) {
    299300                        console_set_pos(cbm->cgc->con, crect.p0.x, y);
     
    312313                        }
    313314                }
    314         } else {
     315        } else if ((cbm->flags & bmpf_colorize) == 0) {
     316                /* Color key */
    315317                for (y = crect.p0.y; y < crect.p1.y; y++) {
    316318                        for (x = crect.p0.x; x < crect.p1.x; x++) {
     
    332334                        }
    333335                }
     336        } else {
     337                /* Color key & colorize */
     338                console_set_rgb_color(cbm->cgc->con, cbm->cgc->clr,
     339                    cbm->cgc->clr);
     340
     341                for (y = crect.p0.y; y < crect.p1.y; y++) {
     342                        for (x = crect.p0.x; x < crect.p1.x; x++) {
     343
     344                                clr = pixelmap_get_pixel(&pixelmap,
     345                                    x - offs.x - cbm->rect.p0.x,
     346                                    y - offs.y - cbm->rect.p0.y);
     347
     348                                if (clr != cbm->key_color) {
     349                                        console_set_pos(cbm->cgc->con, x, y);
     350                                        rv = fputc('X', cbm->cgc->fout);
     351                                        if (rv < 0)
     352                                                return EIO;
     353
     354                                        console_flush(cbm->cgc->con);
     355                                }
     356
     357                        }
     358                }
    334359        }
    335360
  • uspace/lib/gfx/include/types/gfx/bitmap.h

    r8bf9058 r0d62c10  
    4747/** Bitmap flags */
    4848typedef enum {
     49        /** Directly map GC output into this bitmap */
     50        bmpf_direct_output = 0x1,
    4951        /** Enable color key */
    50         bmpf_color_key = 0x1,
    51         /** Directly map GC output into this bitmap */
    52         bmpf_direct_output = 0x2
     52        bmpf_color_key = 0x2,
     53        /** Paint non-background pixels with current drawing color */
     54        bmpf_colorize = 0x4
    5355} gfx_bitmap_flags_t;
    5456
  • uspace/lib/gfxfont/src/font.c

    r8bf9058 r0d62c10  
    122122        gfx_bitmap_params_init(&params);
    123123        params.rect = font->rect;
    124         params.flags = bmpf_color_key;
     124        params.flags = bmpf_color_key | bmpf_colorize;
    125125        params.key_color = PIXEL(0, 0, 0, 0);
    126126
     
    366366        if (nrect->p1.y - nrect->p0.y > params.rect.p1.y)
    367367                params.rect.p1.y = nrect->p1.y - nrect->p0.y;
    368         params.flags = bmpf_color_key;
     368        params.flags = bmpf_color_key | bmpf_colorize;
    369369        params.key_color = PIXEL(0, 0, 0, 0);
    370370
     
    705705        params.rect.p1.x = width;
    706706        params.rect.p1.y = height;
    707         params.flags = bmpf_color_key;
     707        params.flags = bmpf_color_key | bmpf_colorize;
    708708        params.key_color = PIXEL(0, 0, 0, 0);
    709709
  • uspace/lib/gfxfont/src/text.c

    r8bf9058 r0d62c10  
    135135                case gfx_valign_bottom:
    136136                        cpos.y -= fmetrics.descent;
    137                         break;
     137                        break;
    138138                default:
    139139                        break;
  • uspace/lib/memgfx/src/memgc.c

    r8bf9058 r0d62c10  
    225225
    226226        /* Check that we support all requested flags */
    227         if ((params->flags & ~(bmpf_color_key | bmpf_direct_output)) != 0)
     227        if ((params->flags & ~(bmpf_color_key | bmpf_colorize |
     228            bmpf_direct_output)) != 0)
    228229                return ENOTSUP;
    229230
     
    367368                /* Nothing to do */
    368369        } else if ((mbm->flags & bmpf_color_key) == 0) {
     370                /* Simple copy */
    369371                for (y = drect.p0.y; y < drect.p1.y; y++) {
    370372                        for (x = drect.p0.x; x < drect.p1.x; x++) {
     
    375377                        }
    376378                }
    377         } else {
     379        } else if ((mbm->flags & bmpf_colorize) == 0) {
     380                /* Color key */
    378381                for (y = drect.p0.y; y < drect.p1.y; y++) {
    379382                        for (x = drect.p0.x; x < drect.p1.x; x++) {
     
    385388                        }
    386389                }
     390        } else {
     391                /* Color key & colorization */
     392                for (y = drect.p0.y; y < drect.p1.y; y++) {
     393                        for (x = drect.p0.x; x < drect.p1.x; x++) {
     394                                pixel = pixelmap_get_pixel(&smap,
     395                                    x - mbm->rect.p0.x - offs.x,
     396                                    y - mbm->rect.p0.y - offs.y);
     397                                if (pixel != mbm->key_color)
     398                                        pixelmap_put_pixel(&dmap, x, y,
     399                                            mbm->mgc->color);
     400                        }
     401                }
    387402        }
    388403
  • uspace/srv/hid/rfb/main.c

    r8bf9058 r0d62c10  
    196196
    197197        /* Check that we support all required flags */
    198         if ((params->flags & ~bmpf_color_key) != 0)
     198        if ((params->flags & ~(bmpf_color_key | bmpf_colorize)) != 0)
    199199                return ENOTSUP;
    200200
     
    287287
    288288        if ((rfbbm->flags & bmpf_color_key) == 0) {
     289                /* Simple copy */
    289290                for (y = srect.p0.y; y < srect.p1.y; y++) {
    290291                        for (x = srect.p0.x; x < srect.p1.x; x++) {
     
    294295                        }
    295296                }
    296         } else {
     297        } else if ((rfbbm->flags & bmpf_colorize) == 0) {
     298                /* Color key */
    297299                for (y = srect.p0.y; y < srect.p1.y; y++) {
    298300                        for (x = srect.p0.x; x < srect.p1.x; x++) {
     
    304306                        }
    305307                }
     308        } else {
     309                /* Color key & colorization */
     310                for (y = srect.p0.y; y < srect.p1.y; y++) {
     311                        for (x = srect.p0.x; x < srect.p1.x; x++) {
     312                                color = pixelmap_get_pixel(&pbm, x, y);
     313                                if (color != rfbbm->key_color) {
     314                                        pixelmap_put_pixel(&rfbbm->rfb->rfb.framebuffer,
     315                                            x + offs.x, y + offs.y,
     316                                            rfbbm->rfb->color);
     317                                }
     318                        }
     319                }
    306320        }
    307321
Note: See TracChangeset for help on using the changeset viewer.