X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5..06578d6778bff8aa2bd6a2387651dd0ba55aa27c:/lib/gdi/gpixmap.h diff --git a/lib/gdi/gpixmap.h b/lib/gdi/gpixmap.h index f68a5748..e3798bf7 100644 --- a/lib/gdi/gpixmap.h +++ b/lib/gdi/gpixmap.h @@ -2,37 +2,37 @@ #define __gpixmap_h #include -#include +#include +#include +#include +#include #include #include -#include - -#include -struct gColor +struct gRGB { - int color; - gColor(int color): color(color) + unsigned char b, g, r, a; + gRGB(int r, int g, int b, int a=0): b(b), g(g), r(r), a(a) { } - gColor(): color(0) + gRGB(unsigned long val): b(val&0xFF), g((val>>8)&0xFF), r((val>>16)&0xFF), a((val>>24)&0xFF) // ARGB { } - operator int() const { return color; } - bool operator==(const gColor &o) const { return o.color==color; } -}; - -struct gRGB -{ - int b, g, r, a; - gRGB(int r, int g, int b, int a=0): b(b), g(g), r(r), a(a) + gRGB(): b(0), g(0), r(0), a(0) { } - gRGB(unsigned long val): b(val&0xFF), g((val>>8)&0xFF), r((val>>16)&0xFF), a((val>>24)&0xFF) // ARGB + + unsigned long argb() const { + return (a<<24)|(r<<16)|(g<<8)|b; } - gRGB() + + 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 { @@ -58,6 +58,20 @@ struct gRGB } }; +#ifndef SWIG +struct gColor +{ + int color; + gColor(int color): color(color) + { + } + gColor(): color(0) + { + } + operator int() const { return color; } + bool operator==(const gColor &o) const { return o.color==color; } +}; + struct gPalette { int start, colors; @@ -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(); }; +#endif + +class gRegion; -struct gPixmap: public iObject +SWIG_IGNORE(gPixmap); +class gPixmap: public iObject { -DECLARE_REF; + DECLARE_REF(gPixmap); public: - int x, y, bpp, bypp, stride; - void *data; - - gPalette clut; - - eSize getSize() const { return eSize(x, y); } - - void fill(const eRect &area, const gColor &color); - +#ifndef SWIG enum { - blitAlphaTest=1 + blitAlphaTest=1, + blitAlphaBlend=2 }; - void blit(const gPixmap &src, ePoint pos, const eRect &clip=eRect(), int flags=0); + + gPixmap(gSurface *surface); + gPixmap(eSize, int bpp, int accel = 0); + + gSurface *surface; + + eLock contentlock; + int final; + + gPixmap *lock(); + void unlock(); + inline bool needClut() const { return surface && surface->bpp <= 8; } +#endif + virtual ~gPixmap(); + eSize size() const { return eSize(surface->x, surface->y); } +private: + bool must_delete_surface; + friend class gDC; + void fill(const gRegion &clip, const gColor &color); + void fill(const gRegion &clip, const gRGB &color); + + 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); +#ifdef SWIG gPixmap(); - virtual ~gPixmap(); -}; - -struct gImage: gPixmap -{ - gImage(eSize size, int bpp); - ~gImage(); +#endif }; +SWIG_TEMPLATE_TYPEDEF(ePtr, gPixmapPtr); #endif