コード例 #1
0
ファイル: html-layout.c プロジェクト: paragasu/mupdf
void
fz_draw_html(fz_context *ctx, fz_html *box, float page_top, float page_bot, fz_device *dev, const fz_matrix *inctm)
{
    fz_matrix ctm = *inctm;
    fz_pre_translate(&ctm, 0, -page_top);
    draw_block_box(ctx, box, page_top, page_bot, dev, &ctm);
}
コード例 #2
0
ファイル: html-layout.c プロジェクト: Crayonic/muPDFC
static void draw_block_box(fz_context *ctx, fz_html *box, float page_top, float page_bot, fz_device *dev, const fz_matrix *ctm)
{
	float x0, y0, x1, y1;
	float color[4];

	// TODO: background fill
	// TODO: border stroke

	float *border = box->border;
	float *padding = box->padding;

	x0 = box->x - padding[L];
	y0 = box->y - padding[T];
	x1 = box->x + box->w + padding[R];
	y1 = box->y + box->h + padding[B];

	if (y0 > page_bot || y1 < page_top)
		return;

	if (box->style.background_color.a > 0)
	{
		color[0] = box->style.background_color.r / 255.0f;
		color[1] = box->style.background_color.g / 255.0f;
		color[2] = box->style.background_color.b / 255.0f;
		color[3] = box->style.background_color.a / 255.0f;
		draw_rect(ctx, dev, ctm, color, x0, y0, x1, y1);
	}

	if (box->style.border_color.a > 0)
	{
		color[0] = box->style.border_color.r / 255.0f;
		color[1] = box->style.border_color.g / 255.0f;
		color[2] = box->style.border_color.b / 255.0f;
		color[3] = box->style.border_color.a / 255.0f;
		if (border[T] > 0)
			draw_rect(ctx, dev, ctm, color, x0 - border[L], y0 - border[T], x1 + border[R], y0);
		if (border[B] > 0)
			draw_rect(ctx, dev, ctm, color, x0 - border[L], y1, x1 + border[R], y1 + border[B]);
		if (border[L] > 0)
			draw_rect(ctx, dev, ctm, color, x0 - border[L], y0 - border[T], x0, y1 + border[B]);
		if (border[R] > 0)
			draw_rect(ctx, dev, ctm, color, x1, y0 - border[T], x1 + border[R], y1 + border[B]);
	}

	for (box = box->down; box; box = box->next)
	{
		switch (box->type)
		{
		case BOX_BLOCK: draw_block_box(ctx, box, page_top, page_bot, dev, ctm); break;
		case BOX_FLOW: draw_flow_box(ctx, box, page_top, page_bot, dev, ctm); break;
		}
	}
}
コード例 #3
0
ファイル: html-layout.c プロジェクト: paragasu/mupdf
static void draw_block_box(fz_context *ctx, fz_html *box, float page_top, float page_bot, fz_device *dev, const fz_matrix *ctm)
{
    float x0, y0, x1, y1;

    float *border = box->border;
    float *padding = box->padding;

    x0 = box->x - padding[L];
    y0 = box->y - padding[T];
    x1 = box->x + box->w + padding[R];
    y1 = box->y + box->h + padding[B];

    if (y0 > page_bot || y1 < page_top)
        return;

    if (box->style.visibility == V_VISIBLE)
    {
        draw_rect(ctx, dev, ctm, box->style.background_color, x0, y0, x1, y1);

        if (border[T] > 0)
            draw_rect(ctx, dev, ctm, box->style.border_color[T], x0 - border[L], y0 - border[T], x1 + border[R], y0);
        if (border[B] > 0)
            draw_rect(ctx, dev, ctm, box->style.border_color[B], x0 - border[L], y1, x1 + border[R], y1 + border[B]);
        if (border[L] > 0)
            draw_rect(ctx, dev, ctm, box->style.border_color[L], x0 - border[L], y0 - border[T], x0, y1 + border[B]);
        if (border[R] > 0)
            draw_rect(ctx, dev, ctm, box->style.border_color[R], x1, y0 - border[T], x1 + border[R], y1 + border[B]);

        if (box->list_item)
            draw_list_mark(ctx, box, page_top, page_bot, dev, ctm, box->list_item);
    }

    for (box = box->down; box; box = box->next)
    {
        switch (box->type)
        {
        case BOX_BLOCK:
            draw_block_box(ctx, box, page_top, page_bot, dev, ctm);
            break;
        case BOX_FLOW:
            draw_flow_box(ctx, box, page_top, page_bot, dev, ctm);
            break;
        }
    }
}