1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 20:38:08 +01:00

I was trying to optimize this w/o using this, hope the change is right.

This commit is contained in:
id
2000-12-17 14:43:08 +00:00
parent 163e70bdae
commit 210ff264b9

View File

@@ -45,6 +45,12 @@ get_shifts(unsigned long mask)
return i; return i;
} }
#define NORMALIZE_RED(pixel) ((rshift>0) ? ((pixel) & rmask) >> rshift \
: ((pixel) & rmask) << -rshift)
#define NORMALIZE_GREEN(pixel) ((gshift>0) ? ((pixel) & gmask) >> gshift \
: ((pixel) & gmask) << -gshift)
#define NORMALIZE_BLUE(pixel) ((bshift>0) ? ((pixel) & bmask) >> bshift \
: ((pixel) & bmask) << -bshift)
RImage* RImage*
RCreateImageFromXImage(RContext *context, XImage *image, XImage *mask) RCreateImageFromXImage(RContext *context, XImage *image, XImage *mask)
@@ -86,14 +92,8 @@ RCreateImageFromXImage(RContext *context, XImage *image, XImage *mask)
data = img->data; data = img->data;
#define NORMALIZE_RED(pixel) ((rshift>0) ? ((pixel) & rmask) >> rshift \
: ((pixel) & rmask) << -rshift)
#define NORMALIZE_GREEN(pixel) ((gshift>0) ? ((pixel) & gmask) >> gshift \
: ((pixel) & gmask) << -gshift)
#define NORMALIZE_BLUE(pixel) ((bshift>0) ? ((pixel) & bmask) >> bshift \
: ((pixel) & bmask) << -bshift)
if (image->depth==1) { if (image->depth==1) {
if (mask) {
for (y = 0; y < image->height; y++) { for (y = 0; y < image->height; y++) {
for (x = 0; x < image->width; x++) { for (x = 0; x < image->width; x++) {
pixel = XGetPixel(image, x, y); pixel = XGetPixel(image, x, y);
@@ -106,8 +106,34 @@ RCreateImageFromXImage(RContext *context, XImage *image, XImage *mask)
*data++ = 0xff; *data++ = 0xff;
*data++ = 0xff; *data++ = 0xff;
} }
if (mask) data++;
}
}
} else {
for (y = 0; y < image->height; y++) {
for (x = 0; x < image->width; x++) {
pixel = XGetPixel(image, x, y);
if (pixel) {
*data++ = 0; *data++ = 0;
*data++ = 0;
*data++ = 0;
} else {
*data++ = 0xff;
*data++ = 0xff;
*data++ = 0xff;
}
}
}
}
} else {
if (mask) {
for (y = 0; y < image->height; y++) {
for (x = 0; x < image->width; x++) {
pixel = XGetPixel(image, x, y);
*(data++) = NORMALIZE_RED(pixel);
*(data++) = NORMALIZE_GREEN(pixel);
*(data++) = NORMALIZE_BLUE(pixel);
data++;
} }
} }
} else { } else {
@@ -117,26 +143,33 @@ RCreateImageFromXImage(RContext *context, XImage *image, XImage *mask)
*(data++) = NORMALIZE_RED(pixel); *(data++) = NORMALIZE_RED(pixel);
*(data++) = NORMALIZE_GREEN(pixel); *(data++) = NORMALIZE_GREEN(pixel);
*(data++) = NORMALIZE_BLUE(pixel); *(data++) = NORMALIZE_BLUE(pixel);
if (mask)
*(data++) = 0;
} }
} }
} }
}
data = img->data;
#define MIN(a,b) ((a)<(b)?(a):(b)) #define MIN(a,b) ((a)<(b)?(a):(b))
if (mask) { if (mask) {
for (y = 0; y < MIN(mask->height, image->height); y++) { data = img->data;
for (x = 0; x < image->width; x++) {
data += 3; /* Skip R, G & B */ data += 3; /* Skip R, G & B */
for (y = 0; y < MIN(mask->height, image->height); y++) {
for (x = 0; x < MIN(mask->width, image->width); x++) {
if (mask->width <= image->width && XGetPixel(mask, x, y)) { if (mask->width <= image->width && XGetPixel(mask, x, y)) {
*(data++) = 0xff; *data = 0xff;
} else { } else {
*(data++) = 0; *data = 0;
} }
data += 4;
}
for (; x < image->width; x++) {
*data = 0;
data += 4;
}
}
for (; y < image->height; y++) {
for (x = 0; x < image->width; x++) {
*data = 0;
data += 4;
} }
} }
} }