From 934f4fd17f92804b2b1bf1244e8e8ac162de0e4a Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 2 Jun 2008 21:38:28 +0000 Subject: Beveled squares for Classic GUI imitation svn-id: r32506 --- graphics/VectorRenderer.cpp | 38 ++++++++++++++++++++++++++++++++++++++ graphics/VectorRenderer.h | 6 ++++++ 2 files changed, 44 insertions(+) diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp index b9d44a224e..43046bafdf 100644 --- a/graphics/VectorRenderer.cpp +++ b/graphics/VectorRenderer.cpp @@ -431,6 +431,44 @@ drawSquareAlg(int x, int y, int w, int h, PixelType color, VectorRenderer::FillM } } +/** SQUARE ALGORITHM **/ +template +void VectorRendererSpec:: +drawBevelSquareAlg(int x, int y, int w, int h, int bevel, PixelType top_color, PixelType bottom_color) { + PixelType *ptr_left = (PixelType *)_activeSurface->getBasePtr(x, y); + int pitch = Base::surfacePitch(); + int i, j; + + i = bevel; + while (i--) { + colorFill(ptr_left, ptr_left + w, top_color); + ptr_left += pitch; + } + + i = h - bevel; + ptr_left = (PixelType *)_activeSurface->getBasePtr(x, y + bevel); + while (i--) { + colorFill(ptr_left, ptr_left + bevel, top_color); + ptr_left += pitch; + } + + i = bevel; + ptr_left = (PixelType *)_activeSurface->getBasePtr(x, y + h - bevel); + while (i--) { + colorFill(ptr_left + i, ptr_left + w, bottom_color); + ptr_left += pitch; + } + + i = h - bevel; + j = bevel; + ptr_left = (PixelType *)_activeSurface->getBasePtr(x + w - bevel, y); + while (i--) { + colorFill(ptr_left + j, ptr_left + bevel, bottom_color); + if (j > 0) j--; + ptr_left += pitch; + } +} + /** GENERIC LINE ALGORITHM **/ template void VectorRendererSpec:: diff --git a/graphics/VectorRenderer.h b/graphics/VectorRenderer.h index b6c72425d7..ed000a9215 100644 --- a/graphics/VectorRenderer.h +++ b/graphics/VectorRenderer.h @@ -146,6 +146,7 @@ public: virtual void drawRoundedSquare(int x, int y, int r, int w, int h) = 0; virtual void drawTriangle(int x, int y, int base, int height, TriangleOrientation orient) = 0; + virtual void drawBeveledSquare(int x, int y, int w, int h, int bevel) = 0; /** * Gets the pixel pitch for the current drawing surface. @@ -373,6 +374,10 @@ public: */ void drawTriangle(int x, int y, int base, int height, TriangleOrientation orient); + void drawBeveledSquare(int x, int y, int w, int h, int bevel) { + drawBevelSquareAlg(x, y, w, h, bevel, _fgColor, _bgColor); + } + /** * @see VectorRenderer::setFgColor() */ @@ -513,6 +518,7 @@ protected: virtual void drawRoundedSquareAlg(int x1, int y1, int r, int w, int h, PixelType color, FillMode fill_m); virtual void drawSquareAlg(int x, int y, int w, int h, PixelType color, FillMode fill_m); virtual void drawTriangleVertAlg(int x, int y, int w, int h, bool inverted, PixelType color, FillMode fill_m); + virtual void drawBevelSquareAlg(int x, int y, int w, int h, int bevel, PixelType top_color, PixelType bottom_color); /** * SHADOW DRAWING ALGORITHMS -- cgit v1.2.3