X-Git-Url: http://git.localhorst.tv/?p=space.git;a=blobdiff_plain;f=src%2Fgraphics%2Fprimitive.cpp;fp=src%2Fgraphics%2Fprimitive.cpp;h=1a68d45a9a8a16acfcd5843af60fce1242f35119;hp=c97345a63ac0380f79f0879b8fbeda23a2bc4ffb;hb=2d0a41dc0a53915153ceccda914d59affd388864;hpb=3f4f8a92f64df08119a40da4d196b3e92ecdc637 diff --git a/src/graphics/primitive.cpp b/src/graphics/primitive.cpp index c97345a..1a68d45 100644 --- a/src/graphics/primitive.cpp +++ b/src/graphics/primitive.cpp @@ -128,4 +128,40 @@ void Grid( } } +void Grid( + SDL_Surface *dst, + Vector first, + Vector second, + Vector size, + Color color) { + Uint32 c = color.MapRGBA(dst); + + Vector from = min(first, second); + Vector to = max(first, second); + + if (size.x <= 1 || size.y <= 1) { + FillRect(dst, from, to - from, c); + return; + } + + if (from.x > dst->w || from.y > dst->h || to.x < 0 || to.y < 0) { + return; + } + + while (from.x < -size.x) from.x += size.x; + while (from.y < -size.y) from.y += size.y; + while (to.x > dst->w + size.x) to.x -= size.x; + while (to.y > dst->h + size.y) to.y -= size.y; + + float width = to.x - from.x; + float height = to.y - from.y; + + for (Vector pos(from); pos.x <= to.x; pos.x += size.x) { + VLine(dst, pos, height, c); + } + for (Vector pos(from); pos.y <= to.y; pos.y += size.y) { + HLine(dst, pos, width, c); + } +} + }