diff options
-rw-r--r-- | graphics/VectorRenderer.cpp | 21 | ||||
-rw-r--r-- | graphics/VectorRenderer.h | 7 |
2 files changed, 26 insertions, 2 deletions
diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp index 256739c614..f62ff92092 100644 --- a/graphics/VectorRenderer.cpp +++ b/graphics/VectorRenderer.cpp @@ -64,7 +64,7 @@ void vector_renderer_test(OSystem *_system) { vr->setColor(255, 0, 0 ); vr->drawLine(25, 25, 125, 300); vr->drawCircle(250, 250, 100); - + vr->drawSquare(150, 150, 100, 100, false); _system->copyRectToOverlay((OverlayColor*)_screen.getBasePtr(0, 0), _screen.w, 0, 0, _screen.w, _screen.w); _system->updateScreen(); _system->delayMillis(100); @@ -75,6 +75,25 @@ void vector_renderer_test(OSystem *_system) { template<typename PixelType, typename PixelFormat> void VectorRendererSpec<PixelType, PixelFormat>:: +drawSquare(int x, int y, int w, int h, bool fill) { + if ( fill ) { + PixelType *ptr = (PixelType *)_activeSurface->getBasePtr(x, y); + int pitch = surfacePitch(); + + while (h--) { + Common::set_to(ptr, ptr + w, (PixelType)_color); + ptr += pitch; + } + } else { + drawLine( x, y, x + w, y ); + drawLine( x + w, y, x + w, y + w ); + drawLine( x, y + w, x + w, y + w ); + drawLine( x, y, x, y + w ); + } +} + +template<typename PixelType, typename PixelFormat> +void VectorRendererSpec<PixelType,PixelFormat>:: drawLineAlg(int x1, int y1, int x2, int y2, int dx, int dy) { PixelType *ptr = (PixelType *)_activeSurface->getBasePtr(x1, y1); int pitch = surfacePitch(); diff --git a/graphics/VectorRenderer.h b/graphics/VectorRenderer.h index 2f648b9c56..b29a8aa633 100644 --- a/graphics/VectorRenderer.h +++ b/graphics/VectorRenderer.h @@ -74,6 +74,9 @@ public: */ virtual void drawCircle(int x, int y, int r) = 0; + + virtual void drawSquare(int x, int y, int w, int h, bool fill) = 0; + /** * Gets the pixel pitch for the current drawing surface. * Note: This is a real pixel-pitch, not a byte-pitch. @@ -206,12 +209,14 @@ public: /** * @see VectorRenderer::drawLine() */ - void drawLine(int x1, int x2, int y1, int y2); + void drawLine(int x1, int y1, int x2, int y2); void drawCircle(int x, int y, int r) { drawCircleAlg(x, y, r); } + void drawSquare(int x, int y, int w, int h, bool fill); + /** * @see VectorRenderer::setColor() */ |