示例#1
0
/* exported interface, documented in thumbnail.h */
bool thumbnail_redraw(struct hlcache_handle *content,
		int width, int height, const struct redraw_context *ctx)
{
	struct redraw_context new_ctx = *ctx;
	struct rect clip;
	struct content_redraw_data data;
	float scale;
	bool plot_ok = true;

	assert(content);

	if (ctx->plot->option_knockout)
		knockout_plot_start(ctx, &new_ctx);

	/* Set clip rectangle to required thumbnail size */
	clip.x0 = 0;
	clip.y0 = 0;
	clip.x1 = width;
	clip.y1 = height;

	new_ctx.plot->clip(&clip);

	/* Plot white background */
	plot_ok &= new_ctx.plot->rectangle(clip.x0, clip.y0, clip.x1, clip.y1,
			plot_style_fill_white);

	/* Find the scale we're using */
	scale = thumbnail_get_redraw_scale(content, width);

	/* Set up content redraw data */
	data.x = 0;
	data.y = 0;
	data.width = width;
	data.height = height;

	data.background_colour = 0xFFFFFF;
	data.scale = scale;
	data.repeat_x = false;
	data.repeat_y = false;

	/* Render the content */
	plot_ok &= content_redraw(content, &data, &clip, &new_ctx);
	
	if (ctx->plot->option_knockout)
		knockout_plot_end();

	return plot_ok;
}
示例#2
0
/* exported interface, documented in content/content.h */
bool content_scaled_redraw(struct hlcache_handle *h,
		int width, int height, const struct redraw_context *ctx)
{
	struct content *c = hlcache_handle_get_content(h);
	struct redraw_context new_ctx = *ctx;
	struct rect clip;
	struct content_redraw_data data;
	bool plot_ok = true;

	assert(c != NULL);

	/* ensure it is safe to attempt redraw */
	if (c->locked) {
		return true;
	}

	/* ensure we have a redrawable content */
	if (c->handler->redraw == NULL) {
		return true;
	}

	LOG("Content %p %dx%d ctx:%p", c, width, height, ctx);

	if (ctx->plot->option_knockout) {
		knockout_plot_start(ctx, &new_ctx);
	}

	/* Set clip rectangle to required thumbnail size */
	clip.x0 = 0;
	clip.y0 = 0;
	clip.x1 = width;
	clip.y1 = height;

	new_ctx.plot->clip(&clip);

	/* Plot white background */
	plot_ok &= new_ctx.plot->rectangle(clip.x0, clip.y0, clip.x1, clip.y1,
			plot_style_fill_white);


	/* Set up content redraw data */
	data.x = 0;
	data.y = 0;
	data.width = width;
	data.height = height;

	data.background_colour = 0xFFFFFF;
	data.repeat_x = false;
	data.repeat_y = false;

	/* Find the scale factor to use if the content has a width */
	if (c->width) {
		data.scale = (float)width / (float)c->width;
	} else {
		data.scale = 1.0;
	}

	/* Render the content */
	plot_ok &= c->handler->redraw(c, &data, &clip, &new_ctx);

	if (ctx->plot->option_knockout) {
		knockout_plot_end();
	}

	return plot_ok;
}