Changeset 313ac8e in mainline for uspace/lib/gfxfont/src/glyph_bmp.c


Ignore:
Timestamp:
2020-09-17T15:28:03Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7bef2d8
Parents:
414020d9
Message:

Make negative quadrants actually work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/gfxfont/src/glyph_bmp.c

    r414020d9 r313ac8e  
    6666                return ENOMEM;
    6767
    68         bmp->rect.p0.x = 0;
    69         bmp->rect.p0.y = 0;
    70         bmp->rect.p1.x = glyph->rect.p1.x - glyph->rect.p0.x;
    71         bmp->rect.p1.y = glyph->rect.p1.y - glyph->rect.p0.y;
    72 
    73         bmp->pixels = calloc(bmp->rect.p1.x * bmp->rect.p1.y, sizeof(int));
     68        /* Bitmap coordinates are relative to glyph origin point */
     69        gfx_rect_rtranslate(&glyph->origin, &glyph->rect, &bmp->rect);
     70
     71        bmp->pixels = calloc((bmp->rect.p1.x - bmp->rect.p0.x) *
     72            (bmp->rect.p1.y - bmp->rect.p0.y), sizeof(int));
    7473        if (bmp->pixels == NULL) {
    7574                free(bmp);
     
    9291        /* Copy pixels from font bitmap */
    9392
    94         for (y = 0; y < bmp->rect.p1.y; y++) {
    95                 for (x = 0; x < bmp->rect.p1.x; x++) {
    96                         pixel = pixelmap_get_pixel(&pmap, glyph->rect.p0.x + x,
    97                             glyph->rect.p0.y + y);
    98                         bmp->pixels[y * bmp->rect.p1.x + x] =
    99                             (pixel != 0) ? 1 : 0;
     93        for (y = bmp->rect.p0.y; y < bmp->rect.p1.y; y++) {
     94                for (x = bmp->rect.p0.x; x < bmp->rect.p1.x; x++) {
     95                        pixel = pixelmap_get_pixel(&pmap, glyph->origin.x + x,
     96                            glyph->origin.y + y);
     97                        bmp->pixels[(y - bmp->rect.p0.y) *
     98                            (bmp->rect.p1.x - bmp->rect.p0.x) +
     99                            (x - bmp->rect.p0.x)] = (pixel != 0) ? 1 : 0;
    100100                }
    101101        }
     
    126126         * is adjusted.
    127127         */
    128         rc = gfx_font_splice_at_glyph(font, glyph,
    129             bmp->rect.p1.x - bmp->rect.p0.x, bmp->rect.p1.y - bmp->rect.p0.y);
     128        rc = gfx_font_splice_at_glyph(font, glyph, &bmp->rect);
    130129        if (rc != EOK)
    131130                return rc;
     
    143142        /* Copy pixels to font bitmap */
    144143
    145         for (y = 0; y < bmp->rect.p1.y; y++) {
    146                 for (x = 0; x < bmp->rect.p1.x; x++) {
    147                         pixel = bmp->pixels[y * bmp->rect.p1.x + x] ?
     144        for (y = bmp->rect.p0.y; y < bmp->rect.p1.y; y++) {
     145                for (x = bmp->rect.p0.x; x < bmp->rect.p1.x; x++) {
     146                        pixel = bmp->pixels[(y - bmp->rect.p0.y) *
     147                            (bmp->rect.p1.x - bmp->rect.p0.x) +
     148                            (x - bmp->rect.p0.x)] ?
    148149                            PIXEL(255, 255, 255, 255) : PIXEL(0, 0, 0, 0);
    149                         pixelmap_put_pixel(&pmap, glyph->rect.p0.x + x,
    150                             glyph->rect.p0.y + y, pixel);
     150                        pixelmap_put_pixel(&pmap, glyph->origin.x + x,
     151                            glyph->origin.y + y, pixel);
    151152                }
    152153        }
     
    193194
    194195        pitch = bmp->rect.p1.x - bmp->rect.p0.x;
     196
    195197        return bmp->pixels[(y - bmp->rect.p0.y) * pitch +
    196198            (x - bmp->rect.p0.x)];
     
    214216        pos.x = x;
    215217        pos.y = y;
     218
    216219        if (!gfx_pix_inside_rect(&pos, &bmp->rect)) {
    217220                rc = gfx_glyph_bmp_extend(bmp, &pos);
Note: See TracChangeset for help on using the changeset viewer.