diff options
Diffstat (limited to 'draw.c')
-rw-r--r-- | draw.c | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -204,6 +204,54 @@ char flip_par_lean(char st){ } void draw_trapezium(int x1, int y1, char st, char fix){ + int xmin, ymin, xmax, ymax; + int dx, dy, ylong, yshort, xoff; + int xincr; + int i; + void (*f)(int, int, char); + + + xmin = MIN(x, x1); + xmax = MAX(x, x1); + ymin = MIN(y, y1); + ymax = MAX(y, y1); + dx = xmax - xmin; + dy = ymax - ymin; + + if (fix == FIX){ + f = set_xy; + copy_lines_to_ring(ymin, ymax, PRV_STATE); + } + else + f = draw_xy; + + /* This is valid only for "upper" trapezoids */ + if (st & BOX_TRAP_U){ + ylong = ymax; + yshort = ymin; + xoff = dy; + xincr = -1; + } + for(i=xmin+1; i<=xmax; i++){ + f(i, ylong, line_h); + } + for(i=xmin+xoff; i<=xmax-xoff; i++){ + f(i, yshort, line_h); + } + f(xmin+xoff, yshort, corner); + f(xmin, ylong, corner); + f(xmax-xoff, yshort, corner); + f(xmax, ylong, corner); + xoff --; + for(i=ymin+1; i<ymax; i++, xoff += xincr){ + f(xmin + xoff, i, '/'); + f(xmax - xoff, i, '\\'); + } + + + if (fix == FIX) + copy_lines_to_ring(ymin, ymax, NEW_STATE); + show_cursor(); } |