Exemplo n.º 1
0
int
pdf__create_gstate(PDF *p, const char *optlist)
{
    pdf_extgstateresource *gs;
    int slot = -1;
    int font = pdc_undef;
    int inum;
    pdc_clientdata data;
    pdc_resopt *results;

    if (optlist == NULL || !*optlist)
        pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "optlist", 0, 0, 0);

    slot = p->extgstates_number;
    if (slot == p->extgstates_capacity)
        pdf_grow_extgstates(p);

    p->extgstates_number++;
    gs = &p->extgstates[slot];
    gs->obj_id = pdc_alloc_id(p->out);

    /* parsing optlist */
    pdf_set_clientdata(p, &data);
    results = pdc_parse_optionlist(p->pdc, optlist, pdf_create_gstate_options,
                                   &data, pdc_true);

    pdc_get_optvalues("alphaisshape", results, &gs->alpha_is_shape, NULL);

    if (pdc_get_optvalues("blendmode", results, &inum, NULL))
        gs->blendmode = (pdf_blendmode) inum;

    gs->dash_count = pdc_get_optvalues("dasharray", results, NULL, NULL);
    gs->dash_array = (pdc_scalar *) pdc_save_lastopt(results, PDC_OPT_SAVEALL);

    pdc_get_optvalues("dashphase", results, &gs->dash_phase, NULL);

    pdc_get_optvalues("flatness", results, &gs->flatness, NULL);

    pdc_get_optvalues("font", results, &font, NULL);
    if (font != pdc_undef)
        gs->font_obj = p->fonts[font].obj_id;

    pdc_get_optvalues("fontsize", results, &gs->font_size, NULL);

    pdc_get_optvalues("linecap", results, &gs->line_cap, NULL);

    pdc_get_optvalues("linejoin", results, &gs->line_join, NULL);

    pdc_get_optvalues("linewidth", results, &gs->line_width, NULL);

    pdc_get_optvalues("miterlimit", results, &gs->miter_limit, NULL);

    pdc_get_optvalues("opacityfill", results, &gs->opacity_fill, NULL);

    pdc_get_optvalues("opacitystroke", results, &gs->opacity_stroke, NULL);

    pdc_get_optvalues("overprintfill", results, &gs->overprint_fill, NULL);

    pdc_get_optvalues("overprintmode", results, &gs->overprint_mode, NULL);

    pdc_get_optvalues("overprintstroke", results, &gs->overprint_stroke, NULL);

    if (pdc_get_optvalues("renderingintent", results, &inum, NULL))
        gs->ri = (pdf_renderingintent) inum;

    pdc_get_optvalues("smoothness", results, &gs->smoothness, NULL);

    pdc_get_optvalues("strokeadjust", results, &gs->stroke_adjust, NULL);

    pdc_get_optvalues("textknockout", results, &gs->text_knockout, NULL);

    pdc_cleanup_optionlist(p->pdc, results);



    return slot;
}
Exemplo n.º 2
0
PDFLIB_API int PDFLIB_CALL
PDF_create_gstate(PDF *p, const char *optlist)
{
    static const char fn[] = "PDF_create_gstate";
    pdf_extgstateresource *gs;
    int slot = -1;
    int font = pdc_undef;
    int inum;
    pdc_clientdata data;
    pdc_resopt *results;

    if (!pdf_enter_api(p, fn,
        (pdf_state) (pdf_state_document | pdf_state_content),
        "(p[%p], \"%s\")", (void *) p, optlist))
    {
        PDF_RETURN_HANDLE(p, slot)
    }

    if (optlist == NULL || !*optlist)
        pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "optlist", 0, 0, 0);

    slot = p->extgstates_number;
    if (slot == p->extgstates_capacity)
        pdf_grow_extgstates(p);

    p->extgstates_number++;
    gs = &p->extgstates[slot];
    gs->obj_id = pdc_alloc_id(p->out);

    /* parsing optlist */
    data.compatibility = p->compatibility;
    data.maxfont = p->fonts_number - 1;
    data.hastobepos = p->hastobepos;
    results = pdc_parse_optionlist(p->pdc, optlist, pdf_create_gstate_options,
                                   &data, pdc_true);

    pdc_get_optvalues(p->pdc, "alphaisshape", results,
                      &gs->alpha_is_shape, NULL);

    if (pdc_get_optvalues(p->pdc, "blendmode", results,
                      &inum, NULL))
        gs->blendmode = (pdf_blendmode) inum;

    gs->dash_count = pdc_get_optvalues(p->pdc, "dasharray", results,
                                       NULL, (void **) &gs->dash_array);

    pdc_get_optvalues(p->pdc, "dashphase", results,
                      &gs->dash_phase, NULL);

    pdc_get_optvalues(p->pdc, "flatness", results,
                      &gs->flatness, NULL);

    pdc_get_optvalues(p->pdc, "font", results, &font, NULL);
    if (font != pdc_undef)
        gs->font_obj = p->fonts[font].obj_id;

    pdc_get_optvalues(p->pdc, "fontsize", results,
                      &gs->font_size, NULL);

    pdc_get_optvalues(p->pdc, "linecap", results,
                      &gs->line_cap, NULL);

    pdc_get_optvalues(p->pdc, "linejoin", results,
                      &gs->line_join, NULL);

    pdc_get_optvalues(p->pdc, "linewidth", results,
                      &gs->line_width, NULL);

    pdc_get_optvalues(p->pdc, "miterlimit", results,
                      &gs->miter_limit, NULL);

    pdc_get_optvalues(p->pdc, "opacityfill", results,
                      &gs->opacity_fill, NULL);

    pdc_get_optvalues(p->pdc, "opacitystroke", results,
                      &gs->opacity_stroke, NULL);

    pdc_get_optvalues(p->pdc, "overprintfill", results,
                      &gs->overprint_fill, NULL);

    pdc_get_optvalues(p->pdc, "overprintmode", results,
                      &gs->overprint_mode, NULL);

    pdc_get_optvalues(p->pdc, "overprintstroke", results,
                      &gs->overprint_stroke, NULL);

    if (pdc_get_optvalues(p->pdc, "renderingintent", results,
                          &inum, NULL))
        gs->ri = (pdf_renderingintent) inum;

    pdc_get_optvalues(p->pdc, "smoothness", results,
                      &gs->smoothness, NULL);

    pdc_get_optvalues(p->pdc, "strokeadjust", results,
                      &gs->stroke_adjust, NULL);

    pdc_get_optvalues(p->pdc, "textknockout", results,
                      &gs->text_knockout, NULL);

    pdc_cleanup_optionlist(p->pdc, results);

    PDF_RETURN_HANDLE(p, slot)
}