Exemplo n.º 1
0
static int get_rgb_shifts(void)
{
    get_shifts(xwa.visual->red_mask, &r_pos, &r_size, &r_scale);
    get_shifts(xwa.visual->green_mask, &g_pos, &g_size, &g_scale);
    get_shifts(xwa.visual->blue_mask, &b_pos, &b_size, &b_scale);

    return (1 << r_size) * (1 << g_size) * (1 << b_size);
}
Exemplo n.º 2
0
Arquivo: mkpar.c Projeto: jruby/jay
action* parse_actions(int stateno) {
    register action *actions;

    actions = get_shifts(stateno);
    actions = add_reductions(stateno, actions);
    return (actions);
}
Exemplo n.º 3
0
RImage *RCreateImageFromXImage(RContext * context, XImage * image, XImage * mask)
{
	RImage *img;
	int x, y;
	unsigned long pixel;
	unsigned char *data;
	int rshift, gshift, bshift;
	int rmask, gmask, bmask;

	assert(image != NULL);
	assert(image->format == ZPixmap);
	assert(!mask || mask->format == ZPixmap);

	img = RCreateImage(image->width, image->height, mask != NULL);
	if (!img) {
		return NULL;
	}

	/* I don't know why, but XGetImage() for pixmaps don't set the
	 * {red,green,blue}_mask values correctly.
	 */
	if (context->depth == image->depth) {
		rmask = context->visual->red_mask;
		gmask = context->visual->green_mask;
		bmask = context->visual->blue_mask;
	} else {
		rmask = image->red_mask;
		gmask = image->green_mask;
		bmask = image->blue_mask;
	}

	/* how many bits to shift to normalize the color into 8bpp */
	rshift = get_shifts(rmask) - 8;
	gshift = get_shifts(gmask) - 8;
	bshift = get_shifts(bmask) - 8;

	data = img->data;

	if (image->depth == 1) {
		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;
				} else {
					*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);
				*(data++) = NORMALIZE_RED(pixel);
				*(data++) = NORMALIZE_GREEN(pixel);
				*(data++) = NORMALIZE_BLUE(pixel);
				if (mask)
					data++;
			}
		}
	}

#define MIN(a,b) ((a)<(b)?(a):(b))
	if (mask) {
		data = img->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)) {
					*data = 0xff;
				} else {
					*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;
			}
		}
	}
	return img;
}