Changeset 7b882c1f in mainline for uspace/lib/guigfx/src/canvas.c


Ignore:
Timestamp:
2019-10-21T18:23:29Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0008c0f
Parents:
1822545
git-author:
Jiri Svoboda <jiri@…> (2019-10-21 00:37:28)
git-committer:
Jiri Svoboda <jiri@…> (2019-10-21 18:23:29)
Message:

Need some vector operations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/guigfx/src/canvas.c

    r1822545 r7b882c1f  
    188188        canvas_gc_t *cgc = (canvas_gc_t *) arg;
    189189        canvas_gc_bitmap_t *cbm = NULL;
    190         gfx_coord_t w, h;
     190        gfx_coord2_t dim;
    191191        errno_t rc;
    192192
     
    195195                return ENOMEM;
    196196
    197         w = params->rect.p1.x - params->rect.p0.x;
    198         h = params->rect.p1.y - params->rect.p0.y;
     197        gfx_coord2_subtract(&params->rect.p1, &params->rect.p0, &dim);
    199198        cbm->rect = params->rect;
    200199
    201200        if (alloc == NULL) {
    202                 cbm->surface = surface_create(w, h, NULL, 0);
     201                cbm->surface = surface_create(dim.x, dim.y, NULL, 0);
    203202                if (cbm->surface == NULL) {
    204203                        rc = ENOMEM;
     
    206205                }
    207206
    208                 cbm->alloc.pitch = w * sizeof(uint32_t);
     207                cbm->alloc.pitch = dim.x * sizeof(uint32_t);
    209208                cbm->alloc.off0 = 0;
    210209                cbm->alloc.pixels = surface_direct_access(cbm->surface);
    211210                cbm->myalloc = true;
    212211        } else {
    213                 cbm->surface = surface_create(w, h, alloc->pixels, 0);
     212                cbm->surface = surface_create(dim.x, dim.y, alloc->pixels, 0);
    214213                if (cbm->surface == NULL) {
    215214                        rc = ENOMEM;
     
    259258        gfx_rect_t drect;
    260259        gfx_coord2_t offs;
     260        gfx_coord2_t dim;
    261261
    262262        if (srect0 != NULL)
     
    272272        }
    273273
    274         // XXX Add function to translate rectangle
    275         drect.p0.x = srect.p0.x + offs.x;
    276         drect.p0.y = srect.p0.y + offs.y;
    277         drect.p1.x = srect.p1.x + offs.x;
    278         drect.p1.y = srect.p1.y + offs.y;
     274        /* Destination rectangle */
     275        gfx_rect_translate(&offs, &srect, &drect);
     276
     277        gfx_coord2_subtract(&drect.p1, &drect.p0, &dim);
    279278
    280279        transform_t transform;
     
    293292
    294293        drawctx_set_source(&drawctx, &source);
    295         drawctx_transfer(&drawctx, drect.p0.x, drect.p0.y,
    296             drect.p1.x - drect.p0.x, drect.p1.y - drect.p0.y);
     294        drawctx_transfer(&drawctx, drect.p0.x, drect.p0.y, dim.x, dim.y);
    297295
    298296        update_canvas(cbm->cgc->canvas, cbm->cgc->surface);
Note: See TracChangeset for help on using the changeset viewer.