Beispiel #1
0
byte sprite_bpp(const osspriteop_header *s)
{
	/* bit 31 indicates the presence of a full alpha channel 
	 * rather than a binary mask */
	int type = ((unsigned)s->mode >> osspriteop_TYPE_SHIFT) & 15;
	byte bpp = 0;

	switch (type) {
		case osspriteop_TYPE_OLD:
		{
			bits psr;
			int val;
			if (!xos_read_mode_variable(s->mode, 
					os_MODEVAR_LOG2_BPP, &val, &psr) &&
					!(psr & _C))
				bpp = 1 << val;
		}
		break;
		case osspriteop_TYPE1BPP:  bpp = 1; break;
		case osspriteop_TYPE2BPP:  bpp = 2; break;
		case osspriteop_TYPE4BPP:  bpp = 4; break;
		case osspriteop_TYPE8BPP:  bpp = 8; break;
		case osspriteop_TYPE16BPP: bpp = 16; break;
		case osspriteop_TYPE32BPP: bpp = 32; break;
		case osspriteop_TYPE_CMYK: bpp = 32; break;
	}
	return bpp;
}
Beispiel #2
0
unsigned int ro_gui_dialog_test_sprite(const char *name) {
  	unsigned int result = 0;
  	int var_val;
	os_coord dimensions;
	os_mode mode;
	os_error *error;
	error = xosspriteop_read_sprite_info(osspriteop_USER_AREA,
			theme_sprites, (osspriteop_id)name,
			&dimensions.x, &dimensions.y, 0, &mode);
	if (error) return 1;
	if (((unsigned int)mode) & osspriteop_ALPHA_MASK) result |= 4;
	error = xos_read_mode_variable(mode, os_MODEVAR_LOG2_BPP,
			&var_val, 0);
	if (error) {
	 	LOG(("xos_read_mode_variable:  0x%x: %s",
				error->errnum, error->errmess));
	} else {
	  	if (var_val > 3) result |= 2;
	}
	return result;
}