Example #1
0
fz_bbox
fz_boundgel(fz_gel *gel)
{
	fz_bbox bbox;
	bbox.x0 = fz_idiv(gel->bbox.x0, HSCALE);
	bbox.y0 = fz_idiv(gel->bbox.y0, VSCALE);
	bbox.x1 = fz_idiv(gel->bbox.x1, HSCALE) + 1;
	bbox.y1 = fz_idiv(gel->bbox.y1, VSCALE) + 1;
	return bbox;
}
Example #2
0
fz_bbox
fz_boundgel(fz_gel *gel)
{
	fz_bbox bbox;
	if (gel->len == 0)
		return fz_emptybbox;
	bbox.x0 = fz_idiv(gel->bbox.x0, HSCALE);
	bbox.y0 = fz_idiv(gel->bbox.y0, VSCALE);
	bbox.x1 = fz_idiv(gel->bbox.x1, HSCALE) + 1;
	bbox.y1 = fz_idiv(gel->bbox.y1, VSCALE) + 1;
	return bbox;
}
Example #3
0
fz_bbox
fz_bound_gel(fz_gel *gel)
{
	fz_bbox bbox;
	if (gel->len == 0)
		return fz_empty_bbox;
	bbox.x0 = fz_idiv(gel->bbox.x0, FZ_AA_HSCALE(gel->ctx));
	bbox.y0 = fz_idiv(gel->bbox.y0, FZ_AA_VSCALE(gel->ctx));
	bbox.x1 = fz_idiv(gel->bbox.x1, FZ_AA_HSCALE(gel->ctx)) + 1;
	bbox.y1 = fz_idiv(gel->bbox.y1, FZ_AA_VSCALE(gel->ctx)) + 1;
	return bbox;
}
Example #4
0
static fz_irect fz_clip_rasterizer(fz_context *ctx, const fz_rasterizer *rast)
{
	fz_irect r;
	const int hscale = fz_rasterizer_aa_hscale(rast);
	const int vscale = fz_rasterizer_aa_vscale(rast);

	r.x0 = fz_idiv(rast->clip.x0, hscale);
	r.y0 = fz_idiv(rast->clip.y0, vscale);
	r.x1 = fz_idiv_up(rast->clip.x1, hscale);
	r.y1 = fz_idiv_up(rast->clip.y1, vscale);

	return r;
}
Example #5
0
fz_irect *
fz_bound_gel(fz_context *ctx, const fz_gel *gel, fz_irect *bbox)
{
	const int hscale = fz_aa_hscale;
	const int vscale = fz_aa_vscale;

	if (gel->len == 0)
	{
		*bbox = fz_empty_irect;
	}
	else
	{
		bbox->x0 = fz_idiv(gel->bbox.x0, hscale);
		bbox->y0 = fz_idiv(gel->bbox.y0, vscale);
		bbox->x1 = fz_idiv(gel->bbox.x1, hscale) + 1;
		bbox->y1 = fz_idiv(gel->bbox.y1, vscale) + 1;
	}
	return bbox;
}
Example #6
0
fz_irect
fz_bound_rasterizer(fz_context *ctx, const fz_rasterizer *rast)
{
	fz_irect bbox;
	const int hscale = fz_rasterizer_aa_hscale(rast);
	const int vscale = fz_rasterizer_aa_vscale(rast);

	if (rast->bbox.x1 < rast->bbox.x0 || rast->bbox.y1 < rast->bbox.y0)
	{
		bbox = fz_empty_irect;
	}
	else
	{
		bbox.x0 = fz_idiv(rast->bbox.x0, hscale);
		bbox.y0 = fz_idiv(rast->bbox.y0, vscale);
		bbox.x1 = fz_idiv_up(rast->bbox.x1, hscale);
		bbox.y1 = fz_idiv_up(rast->bbox.y1, vscale);
	}
	return bbox;
}
Example #7
0
fz_error
fz_scanconvert(fz_gel *gel, fz_ael *ael, int eofill, fz_bbox clip,
	fz_pixmap *dest, unsigned char *color)
{
	fz_error error;
	unsigned char *deltas;
	int y, e;
	int yd, yc;

	int xmin = fz_idiv(gel->bbox.x0, HSCALE);
	int xmax = fz_idiv(gel->bbox.x1, HSCALE) + 1;

	int xofs = xmin * HSCALE;

	int skipx = clip.x0 - xmin;
	int clipn = clip.x1 - clip.x0;

	if (gel->len == 0)
		return fz_okay;

	assert(clip.x0 >= xmin);
	assert(clip.x1 <= xmax);

	deltas = fz_malloc(xmax - xmin + 1);
	memset(deltas, 0, xmax - xmin + 1);

	e = 0;
	y = gel->edges[0].y;
	yc = fz_idiv(y, VSCALE);
	yd = yc;

	while (ael->len > 0 || e < gel->len)
	{
		yc = fz_idiv(y, VSCALE);
		if (yc != yd)
		{
			if (yd >= clip.y0 && yd < clip.y1)
			{
				undelta(deltas, skipx + clipn);
				blit(dest, xmin + skipx, yd, deltas + skipx, clipn, color);
				memset(deltas, 0, skipx + clipn);
			}
		}
		yd = yc;

		error = insertael(ael, gel, y, &e);
		if (error) {
			fz_free(deltas);
			return error;
		}

		if (yd >= clip.y0 && yd < clip.y1)
		{
			if (eofill)
				evenodd(ael, deltas, xofs);
			else
				nonzerowinding(ael, deltas, xofs);
		}

		advanceael(ael);

		if (ael->len > 0)
			y ++;
		else if (e < gel->len)
			y = gel->edges[e].y;
	}

	if (yd >= clip.y0 && yd < clip.y1)
	{
		undelta(deltas, skipx + clipn);
		blit(dest, xmin + skipx, yd, deltas + skipx, clipn, color);
	}

	fz_free(deltas);
	return fz_okay;
}