示例#1
0
void initialize_fixed_font(struct fixed_font *self, const struct rgba *rgba,
			   unsigned short int *x, unsigned short int *y,
			   unsigned short int w, unsigned short int h)
{
	int i;
	for (i = 0; i < b6_card_of(self->rgba); i += 1) {
		initialize_rgba(&self->rgba[i], w, h);
		copy_rgba(rgba, x[i], y[i], w, h, &self->rgba[i], 0, 0);
	}
}
示例#2
0
void render_fixed_font(const struct fixed_font *self,
		       const struct b6_utf8 *utf8, struct rgba *rgba,
		       unsigned short int x, unsigned short int y)
{
	struct b6_utf8_iterator iter;
	b6_setup_utf8_iterator(&iter, utf8);
	while (b6_utf8_iterator_has_next(&iter)) {
		int i = b6_utf8_iterator_get_next(&iter) - ' ';
		const struct rgba *from;
		if (i < 0 || i >= b6_card_of(self->rgba))
			continue;
		from = &self->rgba[i];
		copy_rgba(from, 0, 0, from->w, from->h, rgba, x, y);
		x += from->w;
	}
}
示例#3
0
struct renderer_texture *make_texture(struct renderer *renderer,
				      const char *skin_id, const char *data_id)
{
	struct renderer_texture *texture = NULL;
	struct data_entry *entry;
	struct image_data *data;
	struct rgba rgba;
	if (get_image_data(skin_id, data_id, NULL, &entry, &data))
		goto bail_out;
	if (!initialize_rgba(&rgba, data->w, data->h)) {
		copy_rgba(data->rgba, *data->x, *data->y, data->w, data->h,
			  &rgba, 0, 0);
		texture = create_renderer_texture(renderer, &rgba);
		finalize_rgba(&rgba);
	} else
		log_w(_s("out of memory"));
	put_image_data(entry, data);
bail_out:
	return texture;
}
示例#4
0
static int initialize_menu_renderer_image(
	struct menu_renderer_image *self, struct renderer *renderer,
	const struct b6_clock *clock, float x, float y, float w, float h,
	float pos, float speed, const char *skin_id, const char *data_id,
	const struct renderer_observer_ops *ops)
{
	struct renderer_base *root = get_renderer_base(renderer);
	struct renderer_texture *texture[2];
	struct data_entry *entry;
	struct image_data *data;
	struct rgba rgba;
	self->base = NULL;
	if (get_image_data(skin_id, data_id, NULL, &entry, &data))
		return -1;
	initialize_rgba(&rgba, data->w, data->h);
	copy_rgba(data->rgba, *data->x, *data->y, data->w, data->h,
		  &rgba, 0, 0);
	texture[0] = create_renderer_texture_or_die(renderer, &rgba);
	make_shadow_rgba(&rgba);
	texture[1] = create_renderer_texture_or_die(renderer, &rgba);
	finalize_rgba(&rgba);
	self->base = create_renderer_base_or_die(renderer, root, "base", x, y);
	self->tile[1] = create_renderer_tile_or_die(
		renderer, create_renderer_base_or_die(renderer, self->base,
						      "shadow", 3, 3),
		0, 0, w, h, texture[1]);
	self->tile[0] = create_renderer_tile_or_die(
		renderer, create_renderer_base_or_die(renderer, self->base,
						      "image", 0, 0),
		0, 0, w, h, texture[0]);
	put_image_data(entry, data);
	if (ops->on_render == menu_renderer_image_on_render_v)
		setup_linear(&self->linear, clock, self->base->y, pos, speed);
	else
		setup_linear(&self->linear, clock, self->base->x, pos, speed);
	add_renderer_observer(renderer, setup_renderer_observer(
			&self->renderer_observer, data_id, ops));
	return 0;
}