X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d6f6602d7cea3a7899990fe79216af7d98d05917..34e6431eb2c9fcfe1dd9ecf310970a257609c64a:/lib/gdi/gpixmap.h diff --git a/lib/gdi/gpixmap.h b/lib/gdi/gpixmap.h index 048b73a5..7158e269 100644 --- a/lib/gdi/gpixmap.h +++ b/lib/gdi/gpixmap.h @@ -2,11 +2,13 @@ #define __gpixmap_h #include -#include +#include #include +#include #include #include #include +#include struct gColor { @@ -23,16 +25,29 @@ 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 { if (b < c.b) @@ -74,40 +89,6 @@ struct gLookup 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. - */ -class gFont: public virtual iObject -{ -DECLARE_REF; -public: - - 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) - { - } - - virtual ~gFont() - { - } - - gFont() - :pointSize(0) - { - } -}; - struct gSurface { int type; @@ -115,19 +96,28 @@ struct gSurface gPalette clut; void *data; - virtual ~gSurface(); -}; + int data_phys; + int offset; // only for backbuffers -struct gSurfaceSystem: gSurface -{ - gSurfaceSystem(eSize size, int bpp); - ~gSurfaceSystem(); + gSurface(); + gSurface(eSize size, int bpp, int accel); + ~gSurface(); }; -struct gPixmap: public iObject +class gPixmap: public iObject { -DECLARE_REF; + DECLARE_REF(gPixmap); public: + enum + { + blitAlphaTest=1, + blitAlphaBlend=2 + }; + +#ifndef SWIG + gPixmap(gSurface *surface); + gPixmap(eSize, int bpp, int accel = 0); + gSurface *surface; eLock contentlock; @@ -135,23 +125,27 @@ public: gPixmap *lock(); void unlock(); +#endif + virtual ~gPixmap(); - eSize getSize() const { return eSize(surface->x, surface->y); } - - 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: +#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 finalLock(); - gPixmap(gSurface *surface); - gPixmap(eSize, int bpp); - virtual ~gPixmap(); + void line(const gRegion &clip, ePoint start, ePoint end, gColor color); +#else + gPixmap(); +#endif + }; +TEMPLATE_TYPEDEF(ePtr, gPixmapPtr); + #endif