1
0
mirror of git://projects.qi-hardware.com/fped.git synced 2024-12-22 23:53:00 +02:00

postscript.c: move drawing part of ps_pad_name and ps_pad to separate functions

For sharing.
This commit is contained in:
Werner Almesberger 2012-07-18 20:24:00 -03:00
parent 57dbeb1aad
commit 238830c02d

View File

@ -189,18 +189,26 @@ static void ps_string(FILE *file, const char *s)
} }
/* ----- Items ------------------------------------------------------------- */ static void ps_filled_box(FILE *file, struct coord a, struct coord b,
const char *pattern)
static void ps_pad_name(FILE *file, const struct inst *inst)
{ {
struct coord a = inst->base; fprintf(file, "0 setgray %d setlinewidth\n", PS_HATCH_LINE);
struct coord b = inst->u.pad.other; fprintf(file, " %d %d moveto\n", a.x, a.y);
const char *s; fprintf(file, " %d %d lineto\n", b.x, a.y);
fprintf(file, " %d %d lineto\n", b.x, b.y);
fprintf(file, " %d %d lineto\n", a.x, b.y);
fprintf(file, " closepath gsave %s grestore stroke\n", pattern);
}
static void ps_outlined_text_in_rect(FILE *file, const char *s,
struct coord a, struct coord b)
{
const char *t;
unit_type h, w; unit_type h, w;
for (s = inst->u.pad.name; *s == ' '; s++); for (t = s; *t == ' '; t++);
if (!*s) if (!*t)
return; return;
h = a.y-b.y; h = a.y-b.y;
w = a.x-b.x; w = a.x-b.x;
@ -210,16 +218,26 @@ static void ps_pad_name(FILE *file, const struct inst *inst)
w = -w; w = -w;
fprintf(file, "0 setgray /Helvetica-Bold findfont dup\n"); fprintf(file, "0 setgray /Helvetica-Bold findfont dup\n");
fprintf(file, " "); fprintf(file, " ");
ps_string(file, inst->u.pad.name); ps_string(file, s);
fprintf(file, " %d %d\n", w/2, h/2); fprintf(file, " %d %d\n", w/2, h/2);
fprintf(file, " boxfont\n"); fprintf(file, " boxfont\n");
fprintf(file, " %d %d moveto\n", (a.x+b.x)/2, (a.y+b.y)/2); fprintf(file, " %d %d moveto\n", (a.x+b.x)/2, (a.y+b.y)/2);
fprintf(file, " "); fprintf(file, " ");
ps_string(file, inst->u.pad.name); ps_string(file, s);
fprintf(file, " center %d showoutlined newpath\n", PS_FONT_OUTLINE); fprintf(file, " center %d showoutlined newpath\n", PS_FONT_OUTLINE);
} }
/* ----- Items ------------------------------------------------------------- */
static void ps_pad_name(FILE *file, const struct inst *inst)
{
ps_outlined_text_in_rect(file, inst->u.pad.name,
inst->base, inst->u.pad.other);
}
static const char *hatch(layer_type layers) static const char *hatch(layer_type layers)
{ {
switch (layers_to_pad_type(layers)) { switch (layers_to_pad_type(layers)) {
@ -241,15 +259,7 @@ static const char *hatch(layer_type layers)
static void ps_pad(FILE *file, const struct inst *inst, int show_name) static void ps_pad(FILE *file, const struct inst *inst, int show_name)
{ {
struct coord a = inst->base; ps_filled_box(file, inst->base, inst->u.pad.other,
struct coord b = inst->u.pad.other;
fprintf(file, "0 setgray %d setlinewidth\n", PS_HATCH_LINE);
fprintf(file, " %d %d moveto\n", a.x, a.y);
fprintf(file, " %d %d lineto\n", b.x, a.y);
fprintf(file, " %d %d lineto\n", b.x, b.y);
fprintf(file, " %d %d lineto\n", a.x, b.y);
fprintf(file, " closepath gsave %s grestore stroke\n",
hatch(inst->u.pad.layers)); hatch(inst->u.pad.layers));
if (show_name && !inst->u.pad.hole) if (show_name && !inst->u.pad.hole)