towards parallelograms - gramscii - A simple editor for ASCII box-and-arrow charts DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 257ec5d56fbe0ac65b04ae10bf36dd14e86c95a5 DIR parent 39ec615b54c0cc2734ac29ba4caac574c21503a4 HTML Author: KatolaZ <katolaz@freaknet.org> Date: Tue, 13 Aug 2019 16:20:49 +0100 towards parallelograms Diffstat: M draw.c | 59 +++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) --- DIR diff --git a/draw.c b/draw.c @@ -141,7 +141,48 @@ void draw_box(int x1, int y1, int fix){ show_cursor(); } -void get_box(FILE *fc){ +void draw_parallelogram(int x1, int y1, char st, char fix){ + int xmin, ymin, xmax, ymax; + int dy; + int i; + void (*f)(int, int, char); + + + xmin = MIN(x, x1); + xmax = MAX(x, x1); + ymin = MIN(y, y1); + ymax = MAX(y, y1); + dy = ymax - ymin; + + if (fix == FIX){ + f = set_xy; + copy_lines_to_ring(ymin, ymax, PRV_STATE); + } + 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); + } + for(i=ymin+1; i<=ymax; i++){ + f(xmin, i, line_v); + f(xmax, i, line_v); + } + f(xmin, ymin, corner); + f(xmin, ymax, corner); + f(xmax, ymin, corner); + f(xmax, ymax, corner); + if (fix == FIX) + copy_lines_to_ring(ymin, ymax, NEW_STATE); + show_cursor(); + + + +} + + +void get_box(FILE *fc, char st){ char c; int orig_x=x, orig_y=y; redraw(); @@ -156,14 +197,21 @@ void get_box(FILE *fc){ redraw(); step = 1; update_box: - draw_box(orig_x, orig_y, NOFIX); + if (st == BOX_RECT) + draw_box(orig_x, orig_y, NOFIX); + else + draw_parallelogram(orig_x, orig_y, st, NOFIX); status_bar(); show_cursor(); } - if (c == 'b' || c == '\n'){ + if (st == BOX_RECT && (c == 'b' || c == '\n')){ 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); + modified = 1; + } redraw(); mode = MOVE; } @@ -331,6 +379,9 @@ void erase(FILE *fc){ } + + + /*** Visual ***/ @@ -385,6 +436,8 @@ vis_exit: mode = MOVE; } +/*** yank/paste/undo ***/ + void paste(){ int y2;