void pdf__setdash(PDF *p, pdc_scalar b, pdc_scalar w) { pdc_scalar darray[2]; int length = 2; pdc_check_number_limits(p->pdc, "b", b, 0.0, PDC_FLOAT_MAX); pdc_check_number_limits(p->pdc, "w", w, 0.0, PDC_FLOAT_MAX); /* both zero means solid line */ if (b == 0.0 && w == 0.0) { length = 0; } else { darray[0] = b; darray[1] = w; } pdf_setdashpattern_internal(p, darray, length, 0); }
static void pdf_check_color_values( PDF *p, pdf_colorspacetype type, pdc_scalar c1, pdc_scalar c2, pdc_scalar c3, pdc_scalar c4) { switch (type) { case DeviceGray: pdc_check_number_limits(p->pdc, "c1", c1, 0.0, EPSILON); break; case DeviceRGB: pdc_check_number_limits(p->pdc, "c1", c1, 0.0, EPSILON); pdc_check_number_limits(p->pdc, "c2", c2, 0.0, EPSILON); pdc_check_number_limits(p->pdc, "c3", c3, 0.0, EPSILON); break; case DeviceCMYK: pdc_check_number_limits(p->pdc, "c1", c1, 0.0, EPSILON); pdc_check_number_limits(p->pdc, "c2", c2, 0.0, EPSILON); pdc_check_number_limits(p->pdc, "c3", c3, 0.0, EPSILON); pdc_check_number_limits(p->pdc, "c4", c4, 0.0, EPSILON); break; case PatternCS: pdf_check_handle(p, (int) c1, pdc_patternhandle); if (c1 == p->pattern_number - 1 && PDF_GET_STATE(p) & pdf_state_pattern) { pdc_error(p->pdc, PDF_E_PATTERN_SELF, 0, 0, 0, 0); } break; case Separation: pdf_check_handle(p, (int) c1, pdc_colorhandle); pdc_check_number_limits(p->pdc, "c2", c2, 0.0, EPSILON); break; case Indexed: default: break; } } /* pdf_check_color_values */
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); } }
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); } }
void pdf__arcn(PDF *p, pdc_scalar x, pdc_scalar y, pdc_scalar r, pdc_scalar alpha, pdc_scalar beta) { pdc_check_number(p->pdc, "x", x); pdc_check_number(p->pdc, "y", y); pdc_check_number_limits(p->pdc, "r", r, PDC_FLOAT_PREC, PDC_FLOAT_MAX); pdc_check_number(p->pdc, "alpha", alpha); pdc_check_number(p->pdc, "beta", beta); pdf_orient_arc(p, x, y, r, p->ydirection * alpha, p->ydirection * beta, -p->ydirection); }
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); } }
void pdf__circle(PDF *p, pdc_scalar x, pdc_scalar y, pdc_scalar r) { pdc_check_number(p->pdc, "x", x); pdc_check_number(p->pdc, "y", y); pdc_check_number_limits(p->pdc, "r", r, PDC_FLOAT_PREC, PDC_FLOAT_MAX); /* * pdf_begin_path() not required since we descend to other * path segment functions. */ /* draw four Bezier curves to approximate a circle */ pdf__moveto(p, x + r, y); pdf__curveto(p, x + r, y + r*ARC_MAGIC, x + r*ARC_MAGIC, y + r, x, y + r); pdf__curveto(p, x - r*ARC_MAGIC, y + r, x - r, y + r*ARC_MAGIC, x - r, y); pdf__curveto(p, x - r, y - r*ARC_MAGIC, x - r*ARC_MAGIC, y - r, x, y - r); pdf__curveto(p, x + r*ARC_MAGIC, y - r, x + r, y - r*ARC_MAGIC, x + r, y); pdf__closepath(p); }
/* Start a new pattern definition. */ int pdf__begin_pattern( PDF *p, pdc_scalar width, pdc_scalar height, pdc_scalar xstep, pdc_scalar ystep, int painttype) { int slot = -1; pdc_check_number_limits(p->pdc, "width", width, PDC_FLOAT_PREC, PDC_FLOAT_MAX); pdc_check_number_limits(p->pdc, "height", height, PDC_FLOAT_PREC, PDC_FLOAT_MAX); pdc_check_number_zero(p->pdc, "xstep", xstep); pdc_check_number_zero(p->pdc, "ystep", ystep); if (painttype != 1 && painttype != 2) pdc_error(p->pdc, PDC_E_ILLARG_INT, "painttype", pdc_errprintf(p->pdc, "%d", painttype), 0, 0); if (p->pattern_number == p->pattern_capacity) pdf_grow_pattern(p); pdf_pg_suspend(p); PDF_SET_STATE(p, pdf_state_pattern); p->pattern[p->pattern_number].obj_id = pdc_begin_obj(p->out, PDC_NEW_ID); p->pattern[p->pattern_number].painttype = painttype; pdc_begin_dict(p->out); /* pattern dict*/ p->res_id = pdc_alloc_id(p->out); pdc_puts(p->out, "/PatternType 1\n"); /* tiling pattern */ /* colored or uncolored pattern */ pdc_printf(p->out, "/PaintType %d\n", painttype); pdc_puts(p->out, "/TilingType 1\n"); /* constant spacing */ pdc_printf(p->out, "/BBox[0 0 %f %f]\n", width, height); pdc_printf(p->out, "/XStep %f\n", xstep); pdc_printf(p->out, "/YStep %f\n", ystep); pdc_objref(p->out, "/Resources", p->res_id); p->length_id = pdc_alloc_id(p->out); pdc_objref(p->out, "/Length", p->length_id); if (pdc_get_compresslevel(p->out)) pdc_puts(p->out, "/Filter/FlateDecode\n"); pdc_end_dict(p->out); /* pattern dict*/ pdc_begin_pdfstream(p->out); slot = p->pattern_number; p->pattern_number++; /* top-down y-coordinates */ pdf_set_topdownsystem(p, height); /* set color differing from PDF default */ pdf_set_default_color(p, pdc_false); if (!p->pdc->smokerun) pdc_logg_cond(p->pdc, 1, trc_api, "[Begin pattern %d]\n", slot); return slot; }