diff --git a/src/Imlib2.h b/src/Imlib2.h index aa3e45b..e29d109 100644 --- a/src/Imlib2.h +++ b/src/Imlib2.h @@ -249,6 +249,7 @@ ImlibPolygon imlib_polygon_new(int type); void imlib_polygon_free(ImlibPolygon poly); void imlib_polygon_add_point(ImlibPolygon poly, int x, int y); void imlib_image_draw_polygon(ImlibPolygon poly); +void imlib_polygon_get_bounds(ImlibPolygon poly, int *px1, int *py1, int *px2, int *py2); Imlib_Color_Range imlib_create_color_range(void); void imlib_free_color_range(void); diff --git a/src/api.c b/src/api.c index 01b8423..9e08008 100644 --- a/src/api.c +++ b/src/api.c @@ -2748,3 +2748,9 @@ void imlib_image_draw_polygon(ImlibPolygon poly) ctxt_color.blue, ctxt_color.alpha, ctxt_operation); } } + +void imlib_polygon_get_bounds(ImlibPolygon poly, int *px1, int *py1, int *px2, int *py2) +{ + CHECK_PARAM_POINTER("imlib_polygon_get_bounds", "polygon", poly); + __imlib_polygon_get_bounds(poly, px1, py1, px2, py2); +} diff --git a/src/rgbadraw.c b/src/rgbadraw.c index 072cff3..906cc8d 100644 --- a/src/rgbadraw.c +++ b/src/rgbadraw.c @@ -1705,3 +1705,18 @@ __imlib_draw_polygon_clipped(ImlibImage * im, ImlibPoly poly, int clip_xmin, } } +void __imlib_polygon_get_bounds(ImlibPoly poly, int *px1, int *py1, int *px2, int *py2) +{ + int x1,y1,x2,y2; + int i; + if(!poly || !poly->points || (poly->pointcount < 2)) + return; + + for(i = 0; i < poly->pointcount; i++) + GROW_BOUNDS (x1, y1, x2, y2, poly->points[i].x, poly->points[i].y); + + *px1 = x1; + *py1 = y1; + *px2 = x2; + *py2 = y2; +} diff --git a/src/rgbadraw.h b/src/rgbadraw.h index c5cac68..ed5f888 100644 --- a/src/rgbadraw.h +++ b/src/rgbadraw.h @@ -1,6 +1,22 @@ #ifndef __RGBADRAW #define __RGBADRAW 1 + +#define GROW_BOUNDS(px1, py1, px2, py2, x, y) { \ + if (x < px1) \ + px1 = x; \ + \ + if (x > px2) \ + px2 = x; \ + \ + if (y < py1) \ + py1 = y; \ + \ + if (y > py2) \ + py2 = y; \ +} + + typedef struct _imlib_point ImlibPoint; struct _imlib_point @@ -76,4 +92,5 @@ void __imlib_draw_polygon_clipped(ImlibImage * im, ImlibPoly poly, int clip_xmin, int clip_xmax, int clip_ymin, int clip_ymax, DATA8 r, DATA8 g, DATA8 b, DATA8 a, ImlibOp op); +void __imlib_polygon_get_bounds(ImlibPoly poly, int *px1, int *py1, int *px2, int *py2); #endif