示例#1
0
bool sprite_convert(struct content *c)
{
	os_error *error;
	int w, h;
	union content_msg_data msg_data;
	const char *source_data;
	unsigned long source_size;
	const void *sprite_data;
	char title[100];

	source_data = content__get_source_data(c, &source_size);

	sprite_data = source_data - 4;
	osspriteop_area *area = (osspriteop_area*) sprite_data;
	c->data.sprite.data = area;

	/* check for bad data */
	if ((int)source_size + 4 != area->used) {
		msg_data.error = messages_get("BadSprite");
		content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
		return false;
	}

	error = xosspriteop_read_sprite_info(osspriteop_PTR,
			(osspriteop_area *)0x100,
			(osspriteop_id) ((char *) area + area->first),
			&w, &h, NULL, NULL);
	if (error) {
		LOG(("xosspriteop_read_sprite_info: 0x%x: %s",
				error->errnum, error->errmess));
		msg_data.error = error->errmess;
		content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
		return false;
	}

	c->width = w;
	c->height = h;
	snprintf(title, sizeof(title), messages_get("SpriteTitle"), c->width,
				c->height, source_size);
	content__set_title(c, title);
	c->status = CONTENT_STATUS_DONE;
	/* Done: update status bar */
	content_set_status(c, "");
	return true;
}
示例#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;
}