diff options
Diffstat (limited to 'draw.c')
-rw-r--r-- | draw.c | 58 |
1 files changed, 42 insertions, 16 deletions
@@ -143,8 +143,9 @@ void draw_box(int x1, int y1, int fix){ void draw_parallelogram(int x1, int y1, char st, char fix){ int xmin, ymin, xmax, ymax; - int dy; + int dy, minoff, maxoff, xoff, xincr; int i; + char lean; void (*f)(int, int, char); @@ -160,27 +161,47 @@ void draw_parallelogram(int x1, int y1, char st, char fix){ } else f = draw_xy; - /*FIXME: INCOMPLETE -- CONTINUE HERE */ - for(i=xmin+1; i<=xmax; i++){ - f(i, ymin, line_h); - f(i, ymax, line_h); + if (st & BOX_PARR){ + minoff = dy; + maxoff = 0; + lean = '/'; + xincr = -1; } - for(i=ymin+1; i<=ymax; i++){ - f(xmin, i, line_v); - f(xmax, i, line_v); + else { + minoff = 0; + maxoff = dy; + lean = '\\'; + xincr = +1; } - f(xmin, ymin, corner); - f(xmin, ymax, corner); - f(xmax, ymin, corner); - f(xmax, ymax, corner); + for(i=xmin+1; i<=xmax-dy; i++){ + f(i+minoff, ymin, line_h); + f(i+maxoff, ymax, line_h); + } + + for(i=ymin+1, xoff=minoff; i<=ymax; i++, xoff += xincr){ + f(xmin+(xoff+xincr), i, lean); + if (minoff) + f(xmax - (minoff - xoff - xincr), i, lean); + else + f(xmax - (maxoff - xoff - xincr), i, lean); + } + f(xmin+minoff, ymin, corner); + f(xmin+maxoff, ymax, corner); + f(xmax-maxoff, ymin, corner); + f(xmax-minoff, ymax, corner); if (fix == FIX) copy_lines_to_ring(ymin, ymax, NEW_STATE); show_cursor(); - - } +char flip_lean(char st){ + if (st & BOX_PARR) + return BOX_PARL; + else if (st & BOX_PARL) + return BOX_PARR; + return st; +} void get_box(FILE *fc, char st){ char c; @@ -189,6 +210,11 @@ void get_box(FILE *fc, char st){ step = 1; draw_box(x,y,NOFIX); while((c=fgetc(fc))!=EOF && c != 27 && c!= 'b' && c != '\n'){ + if (c == 'Z'){ + st = flip_lean(st); + redraw(); + goto update_box; + } if (change_style(c)) goto update_box; if (!move_around(c, fc, 1)) @@ -208,8 +234,8 @@ update_box: draw_box(orig_x, orig_y, FIX); modified = 1; } - else if ((st & (BOX_PAR1 | BOX_PAR2)) && (c == 'z' || c == 'Z' || c == '\n')){ - draw_parallelogram(orig_x, orig_y, FIX); + else if ((st & (BOX_PARR | BOX_PARL)) && (c == 'z' || c == '\n')){ + draw_parallelogram(orig_x, orig_y, st, FIX); modified = 1; } redraw(); |