diff options
Diffstat (limited to 'src/guichan/sdl/sdlgraphics.hpp')
-rw-r--r-- | src/guichan/sdl/sdlgraphics.hpp | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/src/guichan/sdl/sdlgraphics.hpp b/src/guichan/sdl/sdlgraphics.hpp new file mode 100644 index 000000000..70a234d33 --- /dev/null +++ b/src/guichan/sdl/sdlgraphics.hpp @@ -0,0 +1,156 @@ +/* _______ __ __ __ ______ __ __ _______ __ __ + * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ + * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / + * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / + * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / + * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / + * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ + * + * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson + * + * + * Per Larsson a.k.a finalman + * Olof Naessén a.k.a jansem/yakslem + * + * Visit: http://guichan.sourceforge.net + * + * License: (BSD) + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name of Guichan nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef GCN_SDLGRAPHICS_HPP +#define GCN_SDLGRAPHICS_HPP + +#include "SDL.h" + +#include "guichan/color.hpp" +#include "guichan/graphics.hpp" +#include "guichan/platform.hpp" + +namespace gcn +{ + class Image; + class Rectangle; + + /** + * SDL implementation of the Graphics. + */ + class GCN_EXTENSION_DECLSPEC SDLGraphics : public Graphics + { + public: + + // Needed so that drawImage(gcn::Image *, int, int) is visible. + using Graphics::drawImage; + + /** + * Constructor. + */ + SDLGraphics(); + + /** + * Sets the target SDL_Surface to draw to. The target can be any + * SDL_Surface. This funtion also pushes a clip areas corresponding to + * the dimension of the target. + * + * @param target the target to draw to. + */ + virtual void setTarget(SDL_Surface* target); + + /** + * Gets the target SDL_Surface. + * + * @return the target SDL_Surface. + */ + virtual SDL_Surface* getTarget() const; + + /** + * Draws an SDL_Surface on the target surface. Normaly you'll + * use drawImage, but if you want to write SDL specific code + * this function might come in handy. + * + * NOTE: The clip areas will be taken into account. + */ + virtual void drawSDLSurface(SDL_Surface* surface, + SDL_Rect source, + SDL_Rect destination); + + + // Inherited from Graphics + + virtual void _beginDraw(); + + virtual void _endDraw(); + + virtual bool pushClipArea(Rectangle area); + + virtual void popClipArea(); + + virtual void drawImage(const Image* image, + int srcX, + int srcY, + int dstX, + int dstY, + int width, + int height); + + virtual void drawPoint(int x, int y); + + virtual void drawLine(int x1, int y1, int x2, int y2); + + virtual void drawRectangle(const Rectangle& rectangle); + + virtual void fillRectangle(const Rectangle& rectangle); + + virtual void setColor(const Color& color); + + virtual const Color& getColor() const; + + protected: + /** + * Draws a horizontal line. + * + * @param x1 the start coordinate of the line. + * @param y the y coordinate of the line. + * @param x2 the end coordinate of the line. + */ + virtual void drawHLine(int x1, int y, int x2); + + /** + * Draws a vertical line. + * + * @param x the x coordinate of the line. + * @param y1 the start coordinate of the line. + * @param y2 the end coordinate of the line. + */ + virtual void drawVLine(int x, int y1, int y2); + + SDL_Surface* mTarget; + Color mColor; + bool mAlpha; + }; +} + +#endif // end GCN_SDLGRAPHICS_HPP |