X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4ebd765cac9f8a7ae4934147ed876a9e228eeb8d..07d7a4b23312577ccfe7b196169160594ba63601:/lib/gdi/gpixmap.cpp diff --git a/lib/gdi/gpixmap.cpp b/lib/gdi/gpixmap.cpp index dbf53838..3ebd9a02 100644 --- a/lib/gdi/gpixmap.cpp +++ b/lib/gdi/gpixmap.cpp @@ -182,6 +182,7 @@ void gPixmap::blit(const gPixmap &src, ePoint pos, const gRegion &clip, int flag eRect area=eRect(pos, src.size()); area&=clip.rects[i]; area&=eRect(ePoint(0, 0), size()); + if ((area.width()<0) || (area.height()<0)) continue; @@ -309,7 +310,7 @@ void gPixmap::blit(const gPixmap &src, ePoint pos, const gRegion &clip, int flag // use duff's device here! while (width--) { - if (!*src) + if (!(pal[*src]&0x80000000)) { src++; dst++; @@ -378,7 +379,7 @@ void gPixmap::line(const gRegion &clip, ePoint start, ePoint dst, gColor color) if (clip.rects.empty()) return; - __u32 col; + __u32 col = 0; if (surface->bpp == 8) { srf8 = (__u8*)surface->data; @@ -437,7 +438,7 @@ void gPixmap::line(const gRegion &clip, ePoint start, ePoint dst, gColor color) do { ++a; - if (a == clip.rects.size()) + if ((unsigned int)a == clip.rects.size()) a = 0; if (a == lasthit) { @@ -469,6 +470,10 @@ fail: gColor gPalette::findColor(const gRGB &rgb) const { + /* grayscale? */ + if (!data) + return (rgb.r + rgb.g + rgb.b) / 3; + int difference=1<<30, best_choice=0; for (int t=0; t