diff options
Diffstat (limited to 'src/video/SDL_video.c')
-rw-r--r-- | src/video/SDL_video.c | 154 |
1 files changed, 135 insertions, 19 deletions
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 467f3824..73c48afa 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -2483,22 +2483,49 @@ SDL_GetRenderDrawBlendMode(int *blendMode) } int -SDL_RenderPoint(int x, int y) +SDL_RenderClear() +{ + SDL_Renderer *renderer; + + renderer = SDL_GetCurrentRenderer(SDL_TRUE); + if (!renderer) { + return -1; + } + if (!renderer->RenderClear) { + int blendMode = renderer->blendMode; + int status; + + if (blendMode >= SDL_BLENDMODE_BLEND) { + SDL_SetRenderDrawBlendMode(SDL_BLENDMODE_NONE); + } + + status = SDL_RenderFillRect(NULL); + + if (blendMode >= SDL_BLENDMODE_BLEND) { + SDL_SetRenderDrawBlendMode(blendMode); + } + return status; + } + return renderer->RenderClear(renderer); +} + +int +SDL_RenderDrawPoint(int x, int y) { SDL_Point point; point.x = x; point.y = y; - return SDL_RenderPoints(&point, 1); + return SDL_RenderDrawPoints(&point, 1); } int -SDL_RenderPoints(const SDL_Point * points, int count) +SDL_RenderDrawPoints(const SDL_Point * points, int count) { SDL_Renderer *renderer; if (!points) { - SDL_SetError("SDL_RenderPoints(): Passed NULL points"); + SDL_SetError("SDL_RenderDrawPoints(): Passed NULL points"); return -1; } @@ -2506,18 +2533,18 @@ SDL_RenderPoints(const SDL_Point * points, int count) if (!renderer) { return -1; } - if (!renderer->RenderPoints) { + if (!renderer->RenderDrawPoints) { SDL_Unsupported(); return -1; } if (count < 1) { return 0; } - return renderer->RenderPoints(renderer, points, count); + return renderer->RenderDrawPoints(renderer, points, count); } int -SDL_RenderLine(int x1, int y1, int x2, int y2) +SDL_RenderDrawLine(int x1, int y1, int x2, int y2) { SDL_Point points[2]; @@ -2525,16 +2552,16 @@ SDL_RenderLine(int x1, int y1, int x2, int y2) points[0].y = y1; points[1].x = x2; points[1].y = y2; - return SDL_RenderLines(points, 2); + return SDL_RenderDrawLines(points, 2); } int -SDL_RenderLines(const SDL_Point * points, int count) +SDL_RenderDrawLines(const SDL_Point * points, int count) { SDL_Renderer *renderer; if (!points) { - SDL_SetError("SDL_RenderLines(): Passed NULL points"); + SDL_SetError("SDL_RenderDrawLines(): Passed NULL points"); return -1; } @@ -2542,30 +2569,77 @@ SDL_RenderLines(const SDL_Point * points, int count) if (!renderer) { return -1; } - if (!renderer->RenderLines) { + if (!renderer->RenderDrawLines) { SDL_Unsupported(); return -1; } if (count < 2) { return 0; } - return renderer->RenderLines(renderer, points, count); + return renderer->RenderDrawLines(renderer, points, count); +} + +int +SDL_RenderDrawRect(const SDL_Rect * rect) +{ + return SDL_RenderDrawRects(&rect, 1); +} + +int +SDL_RenderDrawRects(const SDL_Rect ** rects, int count) +{ + SDL_Renderer *renderer; + int i; + + if (!rects) { + SDL_SetError("SDL_RenderDrawRects(): Passed NULL rects"); + return -1; + } + + renderer = SDL_GetCurrentRenderer(SDL_TRUE); + if (!renderer) { + return -1; + } + if (!renderer->RenderDrawRects) { + SDL_Unsupported(); + return -1; + } + if (count < 1) { + return 0; + } + /* Check for NULL rect, which means fill entire window */ + for (i = 0; i < count; ++i) { + if (rects[i] == NULL) { + SDL_Window *window; + SDL_Rect full_rect; + const SDL_Rect *rect; + + window = SDL_GetWindowFromID(renderer->window); + full_rect.x = 0; + full_rect.y = 0; + full_rect.w = window->w; + full_rect.h = window->h; + rect = &full_rect; + return renderer->RenderDrawRects(renderer, &rect, 1); + } + } + return renderer->RenderDrawRects(renderer, rects, count); } int -SDL_RenderRect(const SDL_Rect * rect) +SDL_RenderFillRect(const SDL_Rect * rect) { - return SDL_RenderRects(&rect, 1); + return SDL_RenderFillRects(&rect, 1); } int -SDL_RenderRects(const SDL_Rect ** rects, int count) +SDL_RenderFillRects(const SDL_Rect ** rects, int count) { SDL_Renderer *renderer; int i; if (!rects) { - SDL_SetError("SDL_RenderRects(): Passed NULL rects"); + SDL_SetError("SDL_RenderFillRects(): Passed NULL rects"); return -1; } @@ -2573,7 +2647,7 @@ SDL_RenderRects(const SDL_Rect ** rects, int count) if (!renderer) { return -1; } - if (!renderer->RenderRects) { + if (!renderer->RenderFillRects) { SDL_Unsupported(); return -1; } @@ -2593,10 +2667,52 @@ SDL_RenderRects(const SDL_Rect ** rects, int count) full_rect.w = window->w; full_rect.h = window->h; rect = &full_rect; - return renderer->RenderRects(renderer, &rect, 1); + return renderer->RenderFillRects(renderer, &rect, 1); } } - return renderer->RenderRects(renderer, rects, count); + return renderer->RenderFillRects(renderer, rects, count); +} + +int +SDL_RenderDrawCircle(int x, int y, int radius) +{ + return SDL_RenderDrawEllipse(x, y, 2*radius, 2*radius); +} + +int +SDL_RenderFillCircle(int x, int y, int radius) +{ + return SDL_RenderFillEllipse(x, y, 2*radius, 2*radius); +} + +int SDL_RenderDrawEllipse(int x, int y, int w, int h) +{ + SDL_Renderer *renderer; + + renderer = SDL_GetCurrentRenderer(SDL_TRUE); + if (!renderer) { + return -1; + } + if (!renderer->RenderDrawEllipse) { + SDL_Unsupported(); + return -1; + } + return renderer->RenderDrawEllipse(renderer, x, y, w, h); +} + +int SDL_RenderFillEllipse(int x, int y, int w, int h) +{ + SDL_Renderer *renderer; + + renderer = SDL_GetCurrentRenderer(SDL_TRUE); + if (!renderer) { + return -1; + } + if (!renderer->RenderFillEllipse) { + SDL_Unsupported(); + return -1; + } + return renderer->RenderFillEllipse(renderer, x, y, w, h); } int |