summaryrefslogtreecommitdiff
path: root/draw.c
diff options
context:
space:
mode:
Diffstat (limited to 'draw.c')
-rw-r--r--draw.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/draw.c b/draw.c
index e1ee63b..3e973b9 100644
--- a/draw.c
+++ b/draw.c
@@ -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();
}