1 /*      _______   __   __   __   ______   __   __   _______   __   __
2  *     / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___  /\ /  |\/ /\
3  *    / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
4  *   / / /__   / / // / // / // / /    / ___  / // ___  / // /| ' / /
5  *  / /_// /\ / /_// / // / // /_/_   / / // / // /\_/ / // / |  / /
6  * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
7  * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
8  *
9  * Copyright (c) 2004 - 2008 Olof Naess�n and Per Larsson
10  *
11  *
12  * Per Larsson a.k.a finalman
13  * Olof Naess�n a.k.a jansem/yakslem
14  *
15  * Visit: http://guichan.sourceforge.net
16  *
17  * License: (BSD)
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions
20  * are met:
21  * 1. Redistributions of source code must retain the above copyright
22  *    notice, this list of conditions and the following disclaimer.
23  * 2. Redistributions in binary form must reproduce the above copyright
24  *    notice, this list of conditions and the following disclaimer in
25  *    the documentation and/or other materials provided with the
26  *    distribution.
27  * 3. Neither the name of Guichan nor the names of its contributors may
28  *    be used to endorse or promote products derived from this software
29  *    without specific prior written permission.
30  *
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
36  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
37  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
38  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
39  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
40  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  */
43 
44 #ifndef GCN_ALLEGROGRAPHICS_HPP
45 #define GCN_ALLEGROGRAPHICS_HPP
46 
47 #include <allegro.h>
48 
49 #include "guichan/color.hpp"
50 #include "guichan/graphics.hpp"
51 #include "guichan/platform.hpp"
52 
53 namespace gcn
54 {
55     class Font;
56 
57     /**
58      * Allegro implementation of Graphics.
59      */
60     class GCN_EXTENSION_DECLSPEC AllegroGraphics : public Graphics
61     {
62     public:
63 
64         // Needed so that drawImage(gcn::Image *, int, int) is visible.
65         using Graphics::drawImage;
66 
67         /**
68          * Constructor.
69          */
70         AllegroGraphics();
71 
72         /**
73          * Contsructor. Sets the drawing target.
74          *
75          * @param target the target to draw to.
76          */
77         AllegroGraphics(BITMAP *target);
78 
79         /**
80          * Destructor.
81          */
82         virtual ~AllegroGraphics();
83 
84         /**
85          * Sets the target bitmap to draw to. It can be any bitmap with the same
86          * bit-depth as the screen. However, if you pass the screen bitmap you
87          * will probably get flicker. Use a double buffer!
88          *
89          * @param target the bitmap to draw to.
90          */
91         virtual void setTarget(BITMAP *target);
92 
93         /**
94          * Gets the target bitmap.
95          *
96          * @return the target bitmap.
97          */
98         virtual BITMAP *getTarget();
99 
100         /**
101          * Gets the color in Allegro format.
102          *
103          * @return the color in Allegro format.
104          */
105         int getAllegroColor() const;
106 
107         /**
108          * Draws an Allegro bitmap.
109          *
110          * @param bitmap the bitmap to draw.
111          * @param dstX the x-coordinate where to draw the bitmap.
112          * @param dstY the y-coordinate where to draw the bitmap.
113          */
114         virtual void drawBitmap(BITMAP* bitmap, int dstX, int dstY);
115 
116 
117         // Inherited from Graphics
118 
119         virtual void _beginDraw();
120 
121         virtual void _endDraw();
122 
123         virtual bool pushClipArea(Rectangle area);
124 
125         virtual void popClipArea();
126 
127         virtual void drawImage(const Image* image,
128                                int srcX,
129                                int srcY,
130                                int dstX,
131                                int dstY,
132                                int width,
133                                int height);
134 
135         virtual void drawPoint(int x, int y);
136 
137         virtual void drawLine(int x1, int y1, int x2, int y2);
138 
139         virtual void drawRectangle(const Rectangle& rectangle);
140 
141         virtual void fillRectangle(const Rectangle& rectangle);
142 
143         virtual void setColor(const Color& color);
144 
145         virtual const Color& getColor() const;
146 
147     protected:
148         BITMAP *mTarget;
149         bool mClipNull;
150         int mAllegroColor;
151         Color mColor;
152     };
153 }
154 
155 #endif // end GCN_ALLEGROGRAPHICS_HPP
156 
157