URI: 
       up-center 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 7eb5b5f064f07bc50cafa1488961fa7be27dee22
   DIR parent e8c98a65cd161a5d2c0a76d41e39b352e083a9ab
  HTML Author: KatolaZ <katolaz@freaknet.org>
       Date:   Mon, 26 Aug 2019 17:30:40 +0100
       
       up-center trapezium working
       
       Diffstat:
         M TODO                                |       3 +--
         M draw.c                              |      48 +++++++++++++++++++++++++++++++
         M gramscii.c                          |       4 ++++
         M gramscii.h                          |      23 +++++++++++++----------
         M screen.c                            |       2 ++
       
       5 files changed, 68 insertions(+), 12 deletions(-)
       ---
   DIR diff --git a/TODO b/TODO
       @@ -1,7 +1,6 @@
        + optimize redraws (redraw only the modified rectangle)
        - add screen geometry option (-g 25x80?)
       -- (?)maybe move "text" mode to "t"
       -- implement trapezium
       ++ implement trapezium
        - implement ellipse
        - (?) filled box (B)
        - (?) manage filled box character (as for other styles)
   DIR diff --git 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();
        
        }
        
   DIR diff --git a/gramscii.c b/gramscii.c
       @@ -134,6 +134,10 @@ void commands(FILE *fc){
                                        case 'r':
                                                read_file_at(fc, x, y);
                                                break;
       +                                case 't':
       +                                        mode = TRP;
       +                                        get_box(fc, BOX_TRAP_UC);
       +                                        break;
                                        case 'z':
                                                mode = PAR;
                                                get_box(fc, BOX_PARR);
   DIR diff --git a/gramscii.h b/gramscii.h
       @@ -20,6 +20,7 @@
        #define VIS    0x10
        #define PAR    0x20
        #define REM    0x40
       +#define TRP    0x80
        /**/
        
        /* directions */
       @@ -37,19 +38,21 @@
        /* rectangular box */
        #define BOX_RECT 0x00
        /* parallelograms */
       -#define BOX_PAR  0x04
       +#define BOX_PAR  0x10
        /* parallelogram (leaning right) */
       -#define BOX_PARR 0x05
       +#define BOX_PARR 0x11
        /* parallelogram (leaning left) */
       -#define BOX_PARL 0x06
       +#define BOX_PARL 0x12
        /* trapezium */
       -#define BOX_TRAP    0x10
       -#define BOX_TRAP_UR 0x11
       -#define BOX_TRAP_UC 0x12
       -#define BOX_TRAP_UL 0x13
       -#define BOX_TRAP_DL 0x14
       -#define BOX_TRAP_DC 0x15
       -#define BOX_TRAP_DR 0x16
       +#define BOX_TRAP    0x20
       +#define BOX_TRAP_U  0x24
       +#define BOX_TRAP_D  0x28
       +#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 NOFIX 0x0
   DIR diff --git a/screen.c b/screen.c
       @@ -39,6 +39,8 @@ char* mode_str(){
                                return "par";
                        case REM:
                                return "rem";
       +                case TRP:
       +                        return "trp";
                        default:
                                return "ERR";
                }