Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

sdlmm_basesurface.h

Go to the documentation of this file.
00001 /*
00002  * SDmm - a C++ wrapper for SDL and related libraries
00003  * Copyright  2001 David Hedbor <david@hedbor.org>
00004  * 
00005  * This program is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License as
00007  * published by the Free Software Foundation; either version 2 of the
00008  * License, or (at your option) any later version.
00009  * 
00010  * This program is distributed in the hope that it will be useful, but
00011  * WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * General Public License for more details.
00014  * 
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018  *
00019  */
00020 
00021 
00022 #ifndef SDLMM_BASESURFACE_H
00023 #define SDLMM_BASESURFACE_H
00024 #include "sdlmm_config.h"
00025 #include "sdlmm_spoint.h"
00026 #include "sdlmm_srect.h"
00027 #include "sdlmm_color.h"
00028 #include "sdlmm_pixelformat.h"
00029 #include <string>
00030 
00031 namespace SDLmm {
00033 
00043   class DECLSPEC BaseSurface {
00044 
00045   protected:
00047     SDL_Surface *me;
00048     virtual void SetSurface(SDL_Surface *surface) {
00049       if(me) {
00050         SDL_FreeSurface(me);
00051       }
00052       me = surface;
00053     }
00054 
00056 
00063     explicit BaseSurface(SDL_Surface *surface)
00064       : me(surface) {
00065     }
00066     
00067     BaseSurface(const BaseSurface& other)
00068       : me(other.me) {
00069     }
00070     
00071     BaseSurface &operator=(const BaseSurface& other) {
00072       if(this != &other)
00073         SetSurface(other.me);
00074       return *this;
00075     }
00076     
00077   public:
00078 
00080     virtual ~BaseSurface() {
00081       if(me) {
00082         SDL_FreeSurface(me);
00083       }
00084     }
00085     
00086     SDL_Surface *GetSurface() {
00087       ASSERT(me);
00088       return me;
00089     }
00090 
00091     const SDL_Surface *GetSurface() const {
00092       ASSERT(me);
00093       return me;
00094     }
00095 
00098     bool Lock();
00099 
00101     void Unlock();
00102     
00104 
00105 
00106 
00107     bool valid() const { return me != 0; }
00108 
00110     Uint32 flags() const { return GetSurface()->flags; }                   
00111 
00113     const PixelFormat GetPixelFormat() const { return PixelFormat(GetSurface()->format); }
00114     PixelFormat GetPixelFormat() { return PixelFormat(GetSurface()->format); }
00115 
00117     int w() const { return GetSurface()->w; }                      
00118 
00120     int h() const { return GetSurface()->h; }                      
00121 
00123     Uint16 pitch() const { return GetSurface()->pitch; }                   
00124 
00126     const SRect clip_rect() const { return SRect(GetSurface()->clip_rect); } 
00127 
00129 
00132     void *pixels() { return GetSurface()->pixels; }
00133 
00135 
00138     const void *pixels() const { return GetSurface()->pixels; }
00139 
00141     struct private_hwdata *hwdata() const { return GetSurface()->hwdata; }
00143 
00145 
00148     void SetPixel(int x, int y, Color color);
00149 
00151 
00155     void SetPixel1(int x, int y, Color color);
00156 
00158 
00162     void SetPixel2(int x, int y, Color color);
00163 
00165 
00169     void SetPixel3(int x, int y, Color color);
00170 
00172 
00176     void SetPixel4(int x, int y, Color color);
00177 
00179 
00182     void SetPixel(const SRect& point, Color color) { SetPixel(point.x, point.y, color); }
00183 
00185 
00188     Color GetPixel(int x, int y) const;
00189 
00191 
00194     Color GetPixel(const SRect& point) const { return GetPixel(point.x, point.y); }
00195 
00198 
00207     bool SetColorKey(Uint32 flag, Color key);
00208       
00210 
00232     bool SetAlpha(Uint32 flag, Uint8 alpha);
00233 
00235 
00236 
00237 
00241     void ResetClipRect();
00242 
00244 
00255     void SetClipRect(const SDL_Rect& rect);
00256     
00258 
00267     void GetClipRect(SDL_Rect& rect) const;
00269 
00271 
00272 
00273 
00287     int Blit(const BaseSurface& src);
00288 
00291 
00309     int Blit(const BaseSurface& src, SDL_Rect& dstrect);
00310 
00313 
00330     int Blit(const BaseSurface& src, const SPoint& dstpoint, SDL_Rect& dstrect) { dstrect.x = dstpoint.x; dstrect.y = dstpoint.y; return Blit(src, dstrect); }
00331 
00334 
00349     int Blit(const BaseSurface& src, const SPoint& dstpoint);
00350 
00353 
00374     int Blit(const BaseSurface& src, const SDL_Rect& srcrect, SDL_Rect& dstrect);
00375 
00378 
00398     int Blit(const BaseSurface& src, const SDL_Rect& srcrect, const SPoint& dstpoint, SDL_Rect& dstrect) { dstrect.x = dstpoint.x; dstrect.y = dstpoint.y; return Blit(src, srcrect, dstrect); }
00399 
00402 
00419     int Blit(const BaseSurface& src, const SDL_Rect& srcrect, const SPoint& dstpoint);
00420 
00422 
00428     bool Fill(Color color);
00429 
00431 
00437     bool Fill(Uint8 r, Uint8 g, Uint8 b) { return Fill(GetPixelFormat().MapRGB(r, g, b)); }
00438 
00440 
00447     bool Fill(Uint8 r, Uint8 g, Uint8 b, Uint8 a) { return Fill(GetPixelFormat().MapRGBA(r, g, b, a)); }
00448 
00450 
00459     bool FillRect(SDL_Rect& dstrect, Color color);
00460 
00462 
00471     bool FillRect(SDL_Rect& dstrect, Uint8 r, Uint8 g, Uint8 b) { return FillRect(dstrect, GetPixelFormat().MapRGB(r, g, b)); }
00472 
00474 
00484     bool FillRect(SDL_Rect& dstrect, Uint8 r, Uint8 g, Uint8 b, Uint8 a) { return FillRect(dstrect, GetPixelFormat().MapRGBA(r, g, b, a)); }
00485 
00487 
00489 
00508     virtual bool SetDisplayFormat() = 0;
00509 
00511 
00530     virtual bool SetDisplayFormatAlpha() = 0;
00531 
00533 
00537     bool SaveBMP(const char *file) const;
00538     
00540 
00544     bool SaveBMP(const std::string& file) const { return SaveBMP(file.c_str()); }
00545    
00546   };
00547 }
00548 
00549 #endif // SDLMM_BASESURFACE_H
00550 

Documentation automatically generated by doxygen written by Dimitri van Heesch. Project hosted at
Hosted by SourceForge