fix
[enigma2.git] / lib / gdi / gpixmap.h
index f68a57480f896efedcdc1ef8a51733c0b98b40df..5b27730b17b99cb3eb52c3928afc7fbd7e10d4ca 100644 (file)
@@ -2,12 +2,13 @@
 #define __gpixmap_h
 
 #include <pthread.h>
-#include <lib/base/estring.h>
+#include <string>
+#include <lib/base/object.h>
+#include <lib/base/smartptr.h>
+#include <lib/base/elock.h>
 #include <lib/gdi/erect.h>
 #include <lib/gdi/fb.h>
-#include <lib/base/elock.h>
-
-#include <lib/base/object.h>
+#include <lib/gdi/region.h>
 
 struct gColor
 {
@@ -24,15 +25,28 @@ struct gColor
 
 struct gRGB
 {
-       int b, g, r, a;
+       unsigned char b, g, r, a;
        gRGB(int r, int g, int b, int a=0): b(b), g(g), r(r), a(a)
        {
        }
        gRGB(unsigned long val): b(val&0xFF), g((val>>8)&0xFF), r((val>>16)&0xFF), a((val>>24)&0xFF)            // ARGB
        {
        }
-       gRGB()
+       gRGB(): b(0), g(0), r(0), a(0)
+       {
+       }
+       
+       unsigned long argb() const
+       {
+               return (a<<24)|(r<<16)|(g<<8)|b;
+       }
+       
+       void operator=(unsigned long val)
        {
+               b = val&0xFF;
+               g = (val>>8)&0xFF;
+               r = (val>>16)&0xFF;
+               a = (val>>24)&0xFF;
        }
        bool operator < (const gRGB &c) const
        {
@@ -71,72 +85,68 @@ struct gLookup
        gColor *lookup;
        gLookup(int size, const gPalette &pal, const gRGB &start, const gRGB &end);
        gLookup();
+       ~gLookup() { delete [] lookup; }
        void build(int size, const gPalette &pal, const gRGB &start, const gRGB &end);
 };
 
-/**
- * \brief A softreference to a font.
- *
- * The font is specified by a name and a size.
- * \c gFont is part of the \ref gdi.
- */
-struct gFont
+struct gSurface
 {
-       eString family;
-       int pointSize;
-       
-       /**
-        * \brief Constructs a font with the given name and size.
-        * \param family The name of the font, for example "NimbusSansL-Regular Sans L Regular".
-        * \param pointSize the size of the font in PIXELS.
-        */
-       gFont(const eString &family, int pointSize):
-                       family(family), pointSize(pointSize)
-       {
-       }
-       
-       enum
-       {
-               tRegular, tFixed
-       };
-       
-       gFont(int type, int pointSize);
+       int type;
+       int x, y, bpp, bypp, stride;
+       gPalette clut;
        
-       gFont()
-               :pointSize(0)
-       {
-       }
+       void *data;
+       int data_phys;
+       int offset; // only for backbuffers
+
+       gSurface();
+       gSurface(eSize size, int bpp, int accel);
+       ~gSurface();
 };
 
-struct gPixmap: public iObject
+class gPixmap: public iObject
 {
-DECLARE_REF;
+       DECLARE_REF(gPixmap);
 public:
-       int x, y, bpp, bypp, stride;
-       void *data;
+       enum
+       {
+               blitAlphaTest=1,
+               blitAlphaBlend=2
+       };
+
+#ifndef SWIG
+       gPixmap(gSurface *surface);
+       gPixmap(eSize, int bpp, int accel = 0);
+
+       gSurface *surface;
        
-       gPalette clut;
+       eLock contentlock;
+       int final;
        
-       eSize getSize() const { return eSize(x, y); }
+       gPixmap *lock();
+       void unlock();
+#endif
+       virtual ~gPixmap();
        
-       void fill(const eRect &area, const gColor &color);
+       eSize size() const { return eSize(surface->x, surface->y); }
+       inline bool needClut() const { return surface && surface->bpp <= 8; }
+private:
+       bool must_delete_surface;
+#ifndef SWIG
+       friend class gDC;
+       void fill(const gRegion &clip, const gColor &color);
+       void fill(const gRegion &clip, const gRGB &color);
        
-       enum
-       {
-               blitAlphaTest=1
-       };
-       void blit(const gPixmap &src, ePoint pos, const eRect &clip=eRect(), int flags=0);
+       void blit(const gPixmap &src, ePoint pos, const gRegion &clip, int flags=0);
        
        void mergePalette(const gPixmap &target);
-       void line(ePoint start, ePoint end, gColor color);
+       void line(const gRegion &clip, ePoint start, ePoint end, gColor color);
+#else
        gPixmap();
-       virtual ~gPixmap();
-};
+#endif
 
-struct gImage: gPixmap
-{
-       gImage(eSize size, int bpp);
-       ~gImage();
 };
 
+TEMPLATE_TYPEDEF(ePtr<gPixmap>, gPixmapPtr);
+
 #endif