Changeset fdc8e40 in mainline for uspace/lib/gfx/src/coord.c


Ignore:
Timestamp:
2019-12-13T22:30:30Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3434233
Parents:
4d9c807
Message:

gfx_rect_clip, gfx_rect_rtranslate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/gfx/src/coord.c

    r4d9c807 rfdc8e40  
    8787/** Move (translate) rectangle.
    8888 *
    89  * @param trans Translation
     89 * @param trans Translation offset
    9090 * @param src Source rectangle
    9191 * @param dest Destination rectangle
     
    9393void gfx_rect_translate(gfx_coord2_t *trans, gfx_rect_t *src, gfx_rect_t *dest)
    9494{
    95         gfx_coord2_add(trans, &src->p0, &dest->p0);
    96         gfx_coord2_add(trans, &src->p1, &dest->p1);
     95        gfx_coord2_add(&src->p0, trans, &dest->p0);
     96        gfx_coord2_add(&src->p1, trans, &dest->p1);
     97}
     98
     99/** Reverse move (translate) rectangle.
     100 *
     101 * @param trans Translation offset
     102 * @param src Source rectangle
     103 * @param dest Destination rectangle
     104 */
     105void gfx_rect_rtranslate(gfx_coord2_t *trans, gfx_rect_t *src, gfx_rect_t *dest)
     106{
     107        gfx_coord2_subtract(&src->p0, trans, &dest->p0);
     108        gfx_coord2_subtract(&src->p1, trans, &dest->p1);
    97109}
    98110
     
    100112 *
    101113 * Envelope is the minimal rectangle covering all pixels of both rectangles.
     114 *
     115 * @param a First rectangle
     116 * @param b Second rectangle
     117 * @param dest Place to store enveloping rectangle
    102118 */
    103119void gfx_rect_envelope(gfx_rect_t *a, gfx_rect_t *b, gfx_rect_t *dest)
     
    124140        dest->p1.x = max(sa.p1.x, sb.p1.x);
    125141        dest->p1.y = max(sa.p1.y, sb.p1.y);
     142}
     143
     144/** Compute intersection of two rectangles.
     145 *
     146 * If the two rectangles do not intersect, the result will be an empty
     147 * rectangle (check with gfx_rect_is_empty()).
     148 *
     149 * @param rect Source rectangle
     150 * @param clip Clipping rectangle
     151 * @param dest Place to store clipped rectangle
     152 */
     153void gfx_rect_clip(gfx_rect_t *rect, gfx_rect_t *clip, gfx_rect_t *dest)
     154{
     155        gfx_rect_t srect, sclip;
     156
     157        gfx_rect_points_sort(rect, &srect);
     158        gfx_rect_points_sort(clip, &sclip);
     159
     160        dest->p0.x = min(max(srect.p0.x, sclip.p0.x), sclip.p1.x);
     161        dest->p0.y = min(max(srect.p0.y, sclip.p0.y), sclip.p1.y);
     162        dest->p1.x = max(sclip.p0.x, min(srect.p1.x, sclip.p1.x));
     163        dest->p1.y = max(sclip.p0.y, min(srect.p1.y, sclip.p1.y));
    126164}
    127165
Note: See TracChangeset for help on using the changeset viewer.