Drawable.hpp

00001 
00002 //
00003 // SFML - Simple and Fast Multimedia Library
00004 // Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com)
00005 //
00006 // This software is provided 'as-is', without any express or implied warranty.
00007 // In no event will the authors be held liable for any damages arising from the use of this software.
00008 //
00009 // Permission is granted to anyone to use this software for any purpose,
00010 // including commercial applications, and to alter it and redistribute it freely,
00011 // subject to the following restrictions:
00012 //
00013 // 1. The origin of this software must not be misrepresented;
00014 //    you must not claim that you wrote the original software.
00015 //    If you use this software in a product, an acknowledgment
00016 //    in the product documentation would be appreciated but is not required.
00017 //
00018 // 2. Altered source versions must be plainly marked as such,
00019 //    and must not be misrepresented as being the original software.
00020 //
00021 // 3. This notice may not be removed or altered from any source distribution.
00022 //
00024 
00025 #ifndef SFML_DRAWABLE_HPP
00026 #define SFML_DRAWABLE_HPP
00027 
00029 // Headers
00031 #include <SFML/Graphics/Color.hpp>
00032 
00033 
00034 namespace sf
00035 {
00036 class RenderWindow;
00037 
00041 namespace Blend
00042 {
00043     enum Mode
00044     {
00045         Alpha,    
00046         Add,      
00047         Multiply, 
00048         None      
00049     };
00050 }
00051 
00056 class SFML_API Drawable
00057 {
00058 public :
00059 
00071     Drawable(float Left = 0.f, float Top = 0.f, float ScaleX = 1.f, float ScaleY = 1.f, float Rotation = 0.f, const Color& Col = Color(255, 255, 255, 255));
00072 
00077     virtual ~Drawable();
00078 
00085     void SetLeft(float Left);
00086 
00093     void SetTop(float Top);
00094 
00102     void SetPosition(float Left, float Top);
00103 
00110     void SetScaleX(float Scale);
00111 
00118     void SetScaleY(float Scale);
00119 
00127     void SetScale(float ScaleX, float ScaleY);
00128 
00135     void SetRotation(float Rotation);
00136 
00146     void SetRotationCenter(float X, float Y);
00147 
00155     void SetColor(const Color& Col);
00156 
00164     void SetBlendMode(Blend::Mode Mode);
00165 
00172     float GetLeft() const;
00173 
00180     float GetTop() const;
00181 
00188     float GetScaleX() const;
00189 
00196     float GetScaleY() const;
00197 
00204     float GetRotation() const;
00205 
00212     const Color& GetColor() const;
00213 
00220     Blend::Mode GetBlendMode() const;
00221 
00229     void Move(float OffsetX, float OffsetY);
00230 
00238     void Scale(float FactorX, float FactorY);
00239 
00246     void Rotate(float Angle);
00247 
00248 private :
00249 
00250     friend class RenderWindow;
00251 
00258     void Draw(const RenderWindow& Window) const;
00259 
00266     virtual void Render(const RenderWindow& Window) const = 0;
00267 
00269     // Member data
00271     float       myLeft;      
00272     float       myTop;       
00273     float       myScaleX;    
00274     float       myScaleY;    
00275     float       myRotation;  
00276     float       myCenterX;   
00277     float       myCenterY;   
00278     Color       myColor;     
00279     Blend::Mode myBlendMode; 
00280 };
00281 
00282 } // namespace sf
00283 
00284 
00285 #endif // SFML_DRAWABLE_HPP