up and down (centred) trapezium working - gramscii - A simple editor for ASCII box-and-arrow charts DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 47a17a404c2faabc3db70df3a7a64a462a1a9d21 DIR parent 7eb5b5f064f07bc50cafa1488961fa7be27dee22 HTML Author: KatolaZ <katolaz@freaknet.org> Date: Sat, 28 Sep 2019 21:48:38 +0100 up and down (centred) trapezium working Diffstat: M draw.c | 37 ++++++++++++++++++++++++++----- M gramscii.h | 6 +++--- 2 files changed, 35 insertions(+), 8 deletions(-) --- DIR diff --git a/draw.c b/draw.c @@ -209,7 +209,7 @@ void draw_trapezium(int x1, int y1, char st, char fix){ int xincr; int i; void (*f)(int, int, char); - + char left_c, right_c; xmin = MIN(x, x1); xmax = MAX(x, x1); @@ -226,11 +226,27 @@ void draw_trapezium(int x1, int y1, char st, char fix){ f = draw_xy; /* This is valid only for "upper" trapezoids */ - if (st & BOX_TRAP_U){ + if ((st & BOX_TRAP_U) == BOX_TRAP_U){ +#ifdef DEBUG + fprintf(stderr, "This is an 'upward' trapezium\n"); +#endif ylong = ymax; yshort = ymin; xoff = dy; xincr = -1; + left_c = '/'; + right_c = '\\'; + } + else if ((st & BOX_TRAP_D) == BOX_TRAP_D){ +#ifdef DEBUG + fprintf(stderr, "This is a 'downward' trapezium\n"); +#endif + ylong = ymin; + yshort = ymax; + xoff = dy; + xincr = +1; + right_c = '/'; + left_c = '\\'; } for(i=xmin+1; i<=xmax; i++){ f(i, ylong, line_h); @@ -243,9 +259,11 @@ void draw_trapezium(int x1, int y1, char st, char fix){ f(xmax-xoff, yshort, corner); f(xmax, ylong, corner); xoff --; + if ((st & BOX_TRAP_D) == BOX_TRAP_D) + xoff = 1; for(i=ymin+1; i<ymax; i++, xoff += xincr){ - f(xmin + xoff, i, '/'); - f(xmax - xoff, i, '\\'); + f(xmin + xoff, i, left_c); + f(xmax - xoff, i, right_c); } @@ -272,6 +290,12 @@ void update_box(int x1, int y1, char st, char fix){ } char toggle_trap_type(char st){ + if (st & BOX_TRAP){ + if (st < BOX_TRAP_DR) + st ++; + else + st = BOX_TRAP_UR; + } return st; } @@ -300,13 +324,16 @@ void get_box(FILE *fc, char st){ st = flip_par_lean(st); redraw(); #ifdef DEBUG - fprintf(stderr, "new parallelogram style: %d\n", st); + fprintf(stderr, "new parallelogram style: %d\n", st); #endif update_box(orig_x, orig_y, st, NOFIX); continue; } else if (c == 'T' && (st & BOX_TRAP)){ st = toggle_trap_type(st); +#ifdef DEBUG + fprintf(stderr, "new trapezium style: %d\n", st); +#endif redraw(); update_box(orig_x, orig_y, st, NOFIX); continue; DIR diff --git a/gramscii.h b/gramscii.h @@ -50,9 +50,9 @@ #define BOX_TRAP_UR 0x25 #define BOX_TRAP_UC 0x26 #define BOX_TRAP_UL 0x27 -#define BOX_TRAP_DL 0x28 -#define BOX_TRAP_DC 0x29 -#define BOX_TRAP_DR 0x2a +#define BOX_TRAP_DL 0x29 +#define BOX_TRAP_DC 0x2a +#define BOX_TRAP_DR 0x2b /**/ #define NOFIX 0x0