fix toggle trapezium type - gramscii - A simple editor for ASCII box-and-arrow charts
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 6dddf567f41d43335698598d310c161fb01462ac
 (DIR) parent 646c1c1cc7ecc0cef7f619ae01457659817e5d05
 (HTM) Author: KatolaZ <katolaz@freaknet.org>
       Date:   Sun, 29 Sep 2019 05:58:54 +0100
       
       fix toggle trapezium type
       
       Diffstat:
         M draw.c                              |      70 +++++++++++++++++++++++++------
         M gramscii.h                          |       4 ++++
       
       2 files changed, 61 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/draw.c b/draw.c
       @@ -226,7 +226,7 @@ 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) == BOX_TRAP_U){
       +        if (STYLE_IS(st, BOX_TRAP_U)){
        #ifdef DEBUG
                        fprintf(stderr, "This is an 'upward' trapezium\n");
        #endif
       @@ -237,7 +237,7 @@ void draw_trapezium(int x1, int y1, char st, char fix){
                        left_c = '/';
                        right_c = '\\';
                }
       -        else if ((st & BOX_TRAP_D) == BOX_TRAP_D){
       +        else if (STYLE_IS(st, BOX_TRAP_D)){
        #ifdef DEBUG
                        fprintf(stderr, "This is a 'downward' trapezium\n");
        #endif
       @@ -248,25 +248,69 @@ void draw_trapezium(int x1, int y1, char st, char fix){
                        right_c = '/';
                        left_c = '\\';
                }
       +        /* Long side */
                for(i=xmin+1; i<=xmax; i++){
                        f(i, ylong, line_h);
                }
       -        if (st & 0x02){ /* Centred trapezium */
       -                for(i=xmin+xoff; i<=xmax-xoff; i++){
       +        /* short side */
       +        for(i=xmin+xoff; i<=xmax-xoff; i++){
       +                f(i, yshort, line_h);
       +        }
       +        
       +        if (STYLE_IS(st, BOX_TRAP_L)){
       +                left_c = '/';
       +                right_c = line_v;
       +                for(i=xmax-xoff;i<xmax; i++){
                                f(i, yshort, line_h);
                        }
       +                xoff = dy;
       +                if (STYLE_IS(st, BOX_TRAP_D)){
       +                        xoff = 0;
       +                        left_c = '\\';
       +                }
       +                for(i=ymin; i<ymax; i++, xoff += xincr){
       +                        f(xmin+xoff, i, left_c);
       +                        f(xmax, i, right_c);
       +                }
       +                xoff = dy;
       +                f(xmin+xoff, yshort, corner);
       +                f(xmax, yshort, corner);
                }
       -        f(xmin+xoff, yshort, corner);
       +        else if (STYLE_IS(st, BOX_TRAP_R)){
       +                right_c = '\\';
       +                left_c = line_v;
       +                for(i=xmin; i<xmin+xoff; i++){
       +                        f(i, yshort, line_h);
       +                }
       +                xoff = dy-1;
       +                if (STYLE_IS(st, BOX_TRAP_D)){
       +                        xoff = 1;
       +                        right_c = '/';
       +                }
       +                for(i=ymin+1; i<ymax; i++, xoff += xincr){
       +                        f(xmin, i, left_c);
       +                        f(xmax-xoff, i, right_c);
       +                }
       +                xoff = dy;
       +                f(xmin, yshort, corner);
       +                f(xmax-xoff, yshort, corner);
       +        }
       +        else if (STYLE_IS(st, BOX_TRAP_C)){
       +                xoff = dy - 1;
       +                if (STYLE_IS(st, BOX_TRAP_D))
       +                        xoff = 1;
       +                for(i=ymin+1; i<ymax; i++, xoff += xincr){
       +                        f(xmin + xoff, i, left_c);
       +                        f(xmax - xoff, i, right_c);
       +                }
       +                xoff = dy;
       +                f(xmin+xoff, yshort, corner);
       +                f(xmax-xoff, yshort, corner);
       +        }
       +        
       +
                f(xmin, ylong, corner);
       -        f(xmax-xoff, yshort, corner);
                f(xmax, ylong, corner);
       -        xoff --;
       -        if ((st & BOX_TRAP_DC) == BOX_TRAP_DC)
       -                xoff = 1;
       -        for(i=ymin+1; i<ymax; i++, xoff += xincr){
       -                f(xmin + xoff, i, left_c);
       -                f(xmax - xoff, i, right_c);
       -        }        
        
                
                if (fix == FIX)
 (DIR) diff --git a/gramscii.h b/gramscii.h
       @@ -47,12 +47,16 @@
        #define BOX_TRAP    0x20
        #define BOX_TRAP_U  0x24
        #define BOX_TRAP_D  0x28
       +#define BOX_TRAP_R  0x21
       +#define BOX_TRAP_C  0x22
       +#define BOX_TRAP_L  0x23
        #define BOX_TRAP_UR 0x25
        #define BOX_TRAP_UC 0x26
        #define BOX_TRAP_UL 0x27
        #define BOX_TRAP_DL 0x29
        #define BOX_TRAP_DC 0x2a
        #define BOX_TRAP_DR 0x2b
       +#define STYLE_IS(x, y) (((x) & (y) ) == y)
        /**/
        
        #define NOFIX 0x0