예제 #1
0
파일: p_gstate.c 프로젝트: AmirAbrams/haiku
static void
pdf__setdashpattern(PDF *p, float *darray, int length, float phase)
{
    pdf_gstate *gs = &p->gstate[p->sl];

    /* length == 0 or 1 means solid line */
    if (length < 2)
    {
        if (gs->dashed || PDF_FORCE_OUTPUT())
        {
            pdc_puts(p->out, "[] 0 d\n");
            gs->dashed = pdc_false;
        }
    }
    else
    {
        int i;

        pdc_puts(p->out, "[");
        for (i = 0; i < length; i++)
        {
            pdc_printf(p->out, "%f ", darray[i]);
        }
        pdc_printf(p->out, "] %f d\n", phase);
        gs->dashed = pdc_true;
    }
}
예제 #2
0
파일: p_gstate.c 프로젝트: xharbour/core
void
pdf_setdashpattern_internal(PDF *p, pdc_scalar *darray, int length,
                            pdc_scalar phase)
{
    pdf_gstate *gs = &p->curr_ppt->gstate[p->curr_ppt->sl];

    /* length == 0 or 1 means solid line */
    if (length < 2)
    {
        if (gs->dashed || PDF_FORCE_OUTPUT())
        {
            pdc_puts(p->out, "[] 0 d\n");
            gs->dashed = pdc_false;
        }
    }
    else
    {
        int i;

	pdc_begin_array(p->out);
        for (i = 0; i < length; i++)
        {
            pdc_printf(p->out, "%f ", darray[i]);
        }
	pdc_end_array_c(p->out);
        pdc_printf(p->out, "%f d\n", phase);
        gs->dashed = pdc_true;
    }
}
예제 #3
0
파일: p_gstate.c 프로젝트: AmirAbrams/haiku
void
pdf__setmiterlimit(PDF *p, float miter)
{
    pdf_gstate *gs = &p->gstate[p->sl];

    if (miter != gs->miter || PDF_FORCE_OUTPUT())
    {
	gs->miter = miter;
	pdc_printf(p->out, "%f M\n", miter);
    }
}
예제 #4
0
파일: p_gstate.c 프로젝트: AmirAbrams/haiku
void
pdf__setlinewidth(PDF *p, float width)
{
    pdf_gstate *gs = &p->gstate[p->sl];

    if (width != gs->lwidth || PDF_FORCE_OUTPUT())
    {
	gs->lwidth = width;
	pdc_printf(p->out, "%f w\n", width);
    }
}
예제 #5
0
파일: p_gstate.c 프로젝트: AmirAbrams/haiku
void
pdf__setlinecap(PDF *p, int cap)
{
    pdf_gstate *gs = &p->gstate[p->sl];

    if (cap != gs->lcap || PDF_FORCE_OUTPUT())
    {
	gs->lcap = cap;
	pdc_printf(p->out, "%d J\n", cap);
    }
}
예제 #6
0
파일: p_gstate.c 프로젝트: AmirAbrams/haiku
void
pdf__setlinejoin(PDF *p, int join)
{
    pdf_gstate *gs = &p->gstate[p->sl];

    if (join != gs->ljoin || PDF_FORCE_OUTPUT())
    {
	gs->ljoin = join;
	pdc_printf(p->out, "%d j\n", join);
    }
}
예제 #7
0
파일: p_gstate.c 프로젝트: AmirAbrams/haiku
void
pdf__setflat(PDF *p, float flat)
{
    pdf_gstate *gs = &p->gstate[p->sl];

    if (flat != gs->flatness || PDF_FORCE_OUTPUT())
    {
	gs->flatness = flat;
	pdc_printf(p->out, "%f i\n", flat);
    }
}
예제 #8
0
파일: p_color.c 프로젝트: LuaDist/cd
static void
pdf_set_color_values(PDF *p, pdf_color *cfill, pdf_color *cstroke,
                     pdf_drawmode drawmode)
{
    pdf_colorspace *cs;

    if (drawmode == pdf_stroke || drawmode == pdf_fillstroke)
    {
        pdf_color *strokecolor = pdf_get_cstate(p, pdf_stroke);

        if (!pdf_color_equal(p, strokecolor, cstroke) || PDF_FORCE_OUTPUT())
        {
            if (PDF_GET_STATE(p) != pdf_state_document)
                pdf_write_color_values(p, cstroke, pdf_stroke);

            *strokecolor = *cstroke;
        }

        cs = &p->colorspaces[cstroke->cs];
        if (!PDF_SIMPLE_COLORSPACE(cs))
            cs->used_on_current_page = pdc_true;
    }

    if (drawmode == pdf_fill || drawmode == pdf_fillstroke)
    {
        pdf_color *fillcolor = pdf_get_cstate(p, pdf_fill);

        if (!pdf_color_equal(p, fillcolor, cfill) || PDF_FORCE_OUTPUT())
        {
            if (PDF_GET_STATE(p) != pdf_state_document)
                pdf_write_color_values(p, cfill, pdf_fill);

            *fillcolor = *cfill;
        }

        cs = &p->colorspaces[cfill->cs];
        if (!PDF_SIMPLE_COLORSPACE(cs))
            cs->used_on_current_page = pdc_true;
    }

} /* pdf_set_color_values */
예제 #9
0
파일: p_gstate.c 프로젝트: xharbour/core
void
pdf__setmiterlimit(PDF *p, pdc_scalar miter)
{
    pdf_gstate *gs = &p->curr_ppt->gstate[p->curr_ppt->sl];

    pdc_check_number_limits(p->pdc, "miter", miter, 1.0, PDC_FLOAT_MAX);

    if (miter != gs->miter || PDF_FORCE_OUTPUT())
    {
        gs->miter = miter;
        pdc_printf(p->out, "%f M\n", miter);
    }
}
예제 #10
0
파일: p_gstate.c 프로젝트: xharbour/core
void
pdf__setflat(PDF *p, pdc_scalar flat)
{
    pdf_gstate *gs = &p->curr_ppt->gstate[p->curr_ppt->sl];

    pdc_check_number_limits(p->pdc, "flat", flat, 0.0, 100.0);

    if (flat != gs->flatness || PDF_FORCE_OUTPUT())
    {
        gs->flatness = flat;
        pdc_printf(p->out, "%f i\n", flat);
    }
}
예제 #11
0
파일: p_gstate.c 프로젝트: xharbour/core
void
pdf__setlinewidth(PDF *p, pdc_scalar width)
{
    pdf_gstate *gs = &p->curr_ppt->gstate[p->curr_ppt->sl];

    pdc_check_number_limits(p->pdc, "width", width,
                            PDC_FLOAT_PREC, PDC_FLOAT_MAX);

    if (width != gs->lwidth || PDF_FORCE_OUTPUT())
    {
        gs->lwidth = width;
        pdc_printf(p->out, "%f w\n", width);
    }
}
예제 #12
0
파일: p_gstate.c 프로젝트: xharbour/core
void
pdf__setlinecap(PDF *p, int cap)
{
    pdf_gstate *gs = &p->curr_ppt->gstate[p->curr_ppt->sl];
    const int LAST_CAP = 2;

    if (cap < 0 || cap > LAST_CAP)
	pdc_error(p->pdc, PDC_E_ILLARG_INT,
	    "cap", pdc_errprintf(p->pdc, "%d", cap), 0, 0);

    if (cap != gs->lcap || PDF_FORCE_OUTPUT())
    {
        gs->lcap = cap;
        pdc_printf(p->out, "%d J\n", cap);
    }
}
예제 #13
0
파일: p_gstate.c 프로젝트: xharbour/core
void
pdf__setlinejoin(PDF *p, int join)
{
    pdf_gstate *gs = &p->curr_ppt->gstate[p->curr_ppt->sl];
    const int LAST_JOIN = 2;

    if (join < 0 || join > LAST_JOIN)
	pdc_error(p->pdc, PDC_E_ILLARG_INT,
	    "join", pdc_errprintf(p->pdc, "%d", join), 0, 0);

    if (join != gs->ljoin || PDF_FORCE_OUTPUT())
    {
        gs->ljoin = join;
        pdc_printf(p->out, "%d j\n", join);
    }
}