/* * num w LW linewidth (g.t. 0) * int J LC linecap * int j LJ linejoin * num M ML miter limit (g.t. 0) * array num d D line dash * int ri RI renderint intnet * int i FL flatness tolerance (0-100) * name gs -- name: res. name of ExtGState dict. */ int texpdf_dev_setmiterlimit (pdf_doc *p, double mlimit) { m_stack *gss = &gs_stack; pdf_gstate *gs = m_stack_top(gss); int len = 0; char *buf = fmt_buf; if (gs->miterlimit != mlimit) { buf[len++] = ' '; len += pdf_sprint_length(buf + len, mlimit); buf[len++] = ' '; buf[len++] = 'M'; texpdf_doc_add_page_content(p, buf, len); /* op: M */ gs->miterlimit = mlimit; } return 0; }
int pdf_dev_setlinewidth (double width) { m_stack *gss = &gs_stack; pdf_gstate *gs = m_stack_top(gss); int len = 0; char *buf = fmt_buf; if (gs->linewidth != width) { buf[len++] = ' '; len += pdf_sprint_length(buf + len, width); buf[len++] = ' '; buf[len++] = 'w'; pdf_doc_add_page_content(buf, len); /* op: w */ gs->linewidth = width; } return 0; }
/* rectfill, rectstroke, rectclip, recteoclip * * Draw isolated rectangle without actually doing * gsave/grestore operation. * * TODO: * linestyle, fill-opacity, stroke-opacity,.... * As this routine draw a single graphics object * each time, there should be options for specifying * various drawing styles, which might inherite * current graphcs state parameter. */ static int pdf_dev__rectshape (const pdf_rect *r, const pdf_tmatrix *M, char opchr ) { char *buf = fmt_buf; int len = 0; int isclip = 0; pdf_coord p; double wd, ht; ASSERT(r && PT_OP_VALID(opchr)); isclip = (opchr == 'W' || opchr == ' ') ? 1 : 0; /* disallow matrix for clipping. * q ... clip Q does nothing and * n M cm ... clip n alter CTM. */ if (M && (isclip || !INVERTIBLE_MATRIX(M))) return -1; graphics_mode(); buf[len++] = ' '; if (!isclip) { buf[len++] = 'q'; if (M) { buf[len++] = ' '; len += pdf_sprint_matrix(buf + len, M); buf[len++] = ' '; buf[len++] = 'c'; buf[len++] = 'm'; } buf[len++] = ' '; } buf[len++] = 'n'; p.x = r->llx; p.y = r->lly; wd = r->urx - r->llx; ht = r->ury - r->lly; buf[len++] = ' '; len += pdf_sprint_coord (buf + len, &p); buf[len++] = ' '; len += pdf_sprint_length(buf + len, wd); buf[len++] = ' '; len += pdf_sprint_length(buf + len, ht); buf[len++] = ' '; buf[len++] = 'r'; buf[len++] = 'e'; if (opchr != ' ') { buf[len++] = ' '; buf[len++] = opchr; buf[len++] = ' '; buf[len++] = isclip ? 'n' : 'Q'; } pdf_doc_add_page_content(buf, len); /* op: q cm n re Q */ return 0; }