From bc4084e67989e8e58068c49078daf5b2e7c3d56c Mon Sep 17 00:00:00 2001 From: Christophe CURIS Date: Sat, 14 Jun 2014 19:34:08 +0200 Subject: [PATCH] wrlib: add explicit type definition in API to allow compiler Type Checks (2/3) When defining enums as types instead of simple enums allows to use these types at the places where the corresponding enum values are expected, then allowing the compiler to check that, potentially reporting incorrect use of values to the user. This patch adds the types for the drawing operations used by the functions who drawing shapes into an RImage. Signed-off-by: Christophe CURIS --- wrlib/draw.c | 27 ++++++++++++++++----------- wrlib/wraster.h | 28 ++++++++++++++-------------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/wrlib/draw.c b/wrlib/draw.c index a9a96260..bf44f8c3 100644 --- a/wrlib/draw.c +++ b/wrlib/draw.c @@ -104,7 +104,7 @@ void RPutPixel(RImage *image, int x, int y, const RColor *color) } } -static void operatePixel(RImage * image, int ofs, int operation, const RColor * color) +static void operatePixel(RImage *image, int ofs, RPixelOperation operation, const RColor *color) { unsigned char *sr, *sg, *sb, *sa; register int alpha, nalpha, tmp; @@ -170,7 +170,7 @@ static void operatePixel(RImage * image, int ofs, int operation, const RColor * } } -void ROperatePixel(RImage * image, int operation, int x, int y, const RColor * color) +void ROperatePixel(RImage *image, RPixelOperation operation, int x, int y, const RColor *color) { int ofs; @@ -184,7 +184,7 @@ void ROperatePixel(RImage * image, int operation, int x, int y, const RColor * c operatePixel(image, ofs, operation, color); } -void RPutPixels(RImage * image, const RPoint * points, int npoints, int mode, const RColor * color) +void RPutPixels(RImage *image, const RPoint *points, int npoints, RCoordinatesMode mode, const RColor *color) { register int x, y, i; @@ -205,7 +205,9 @@ void RPutPixels(RImage * image, const RPoint * points, int npoints, int mode, co } } -void ROperatePixels(RImage * image, int operation, const RPoint * points, int npoints, int mode, const RColor * color) +void ROperatePixels(RImage *image, RPixelOperation operation, + const RPoint *points, int npoints, RCoordinatesMode mode, + const RColor *color) { register int x, y, i; @@ -287,7 +289,8 @@ static Bool clipLineInRectangle(int xmin, int ymin, int xmax, int ymax, int *x1, * This routine is a generic drawing routine, based on Bresenham's line * drawing algorithm. */ -static int genericLine(RImage * image, int x0, int y0, int x1, int y1, const RColor * color, int operation, int polyline) +static int genericLine(RImage *image, int x0, int y0, int x1, int y1, const RColor *color, + RPixelOperation operation, int polyline) { int i, err, du, dv, du2, dv2, uofs, vofs, last; @@ -382,12 +385,12 @@ int RDrawLine(RImage * image, int x0, int y0, int x1, int y1, const RColor * col return genericLine(image, x0, y0, x1, y1, color, RNormalOperation, False); } -int ROperateLine(RImage * image, int operation, int x0, int y0, int x1, int y1, const RColor * color) +int ROperateLine(RImage *image, RPixelOperation operation, int x0, int y0, int x1, int y1, const RColor *color) { return genericLine(image, x0, y0, x1, y1, color, operation, False); } -void RDrawLines(RImage * image, const RPoint * points, int npoints, int mode, const RColor * color) +void RDrawLines(RImage *image, const RPoint *points, int npoints, RCoordinatesMode mode, const RColor *color) { register int x1, y1, x2, y2, i; @@ -425,7 +428,9 @@ void RDrawLines(RImage * image, const RPoint * points, int npoints, int mode, co genericLine(image, x1, y1, x2, y2, color, RNormalOperation, i); } -void ROperateLines(RImage * image, int operation, const RPoint * points, int npoints, int mode, const RColor * color) +void ROperateLines(RImage *image, RPixelOperation operation, + const RPoint *points, int npoints, RCoordinatesMode mode, + const RColor *color) { register int x1, y1, x2, y2, i; @@ -463,7 +468,7 @@ void ROperateLines(RImage * image, int operation, const RPoint * points, int npo genericLine(image, x1, y1, x2, y2, color, operation, i); } -void ROperateRectangle(RImage *image, int operation, int x0, int y0, int x1, int y1, const RColor *color) +void ROperateRectangle(RImage *image, RPixelOperation operation, int x0, int y0, int x1, int y1, const RColor *color) { int y; @@ -472,7 +477,7 @@ void ROperateRectangle(RImage *image, int operation, int x0, int y0, int x1, int } } -void RDrawSegments(RImage * image, const RSegment * segs, int nsegs, const RColor * color) +void RDrawSegments(RImage *image, const RSegment *segs, int nsegs, const RColor *color) { register int i; @@ -484,7 +489,7 @@ void RDrawSegments(RImage * image, const RSegment * segs, int nsegs, const RColo } } -void ROperateSegments(RImage * image, int operation, const RSegment * segs, int nsegs, const RColor * color) +void ROperateSegments(RImage *image, RPixelOperation operation, const RSegment *segs, int nsegs, const RColor *color) { register int i; diff --git a/wrlib/wraster.h b/wrlib/wraster.h index 66443e10..4bb1056a 100644 --- a/wrlib/wraster.h +++ b/wrlib/wraster.h @@ -225,19 +225,19 @@ typedef struct RXImage { /* note that not all operations are supported in all functions */ -enum { +typedef enum { RClearOperation, /* clear with 0 */ RCopyOperation, RNormalOperation, /* same as combine */ RAddOperation, RSubtractOperation -}; +} RPixelOperation; -enum { +typedef enum { RAbsoluteCoordinates = 0, RRelativeCoordinates = 1 -}; +} RCoordinatesMode; enum { @@ -382,30 +382,30 @@ Bool RGetPixel(RImage *image, int x, int y, RColor *color); void RPutPixel(RImage *image, int x, int y, const RColor *color); -void ROperatePixel(RImage *image, int operation, int x, int y, const RColor *color); +void ROperatePixel(RImage *image, RPixelOperation operation, int x, int y, const RColor *color); -void RPutPixels(RImage *image, const RPoint *points, int npoints, int mode, +void RPutPixels(RImage *image, const RPoint *points, int npoints, RCoordinatesMode mode, const RColor *color); -void ROperatePixels(RImage *image, int operation, const RPoint *points, - int npoints, int mode, const RColor *color); +void ROperatePixels(RImage *image, RPixelOperation operation, const RPoint *points, + int npoints, RCoordinatesMode mode, const RColor *color); int RDrawLine(RImage *image, int x0, int y0, int x1, int y1, const RColor *color); -int ROperateLine(RImage *image, int operation, int x0, int y0, int x1, int y1, +int ROperateLine(RImage *image, RPixelOperation operation, int x0, int y0, int x1, int y1, const RColor *color); -void RDrawLines(RImage *image, const RPoint *points, int npoints, int mode, +void RDrawLines(RImage *image, const RPoint *points, int npoints, RCoordinatesMode mode, const RColor *color); -void ROperateLines(RImage *image, int operation, const RPoint *points, int npoints, - int mode, const RColor *color); +void ROperateLines(RImage *image, RPixelOperation operation, const RPoint *points, int npoints, + RCoordinatesMode mode, const RColor *color); -void ROperateRectangle(RImage *image, int operation, int x0, int y0, int x1, int y1, const RColor *color); +void ROperateRectangle(RImage *image, RPixelOperation operation, int x0, int y0, int x1, int y1, const RColor *color); void RDrawSegments(RImage *image, const RSegment *segs, int nsegs, const RColor *color); -void ROperateSegments(RImage *image, int operation, const RSegment *segs, int nsegs, +void ROperateSegments(RImage *image, RPixelOperation operation, const RSegment *segs, int nsegs, const RColor *color); /* -- 2.11.4.GIT