diff options
author | KatolaZ <katolaz@freaknet.org> | 2019-08-26 17:30:40 +0100 |
---|---|---|
committer | KatolaZ <katolaz@freaknet.org> | 2019-08-26 17:30:40 +0100 |
commit | 7eb5b5f064f07bc50cafa1488961fa7be27dee22 (patch) | |
tree | bc087cac8098f298edd04ce49d067ed19d752ecd | |
parent | e8c98a65cd161a5d2c0a76d41e39b352e083a9ab (diff) |
up-center trapezium working
-rw-r--r-- | TODO | 3 | ||||
-rw-r--r-- | draw.c | 48 | ||||
-rw-r--r-- | gramscii.c | 4 | ||||
-rw-r--r-- | gramscii.h | 23 | ||||
-rw-r--r-- | screen.c | 2 |
5 files changed, 68 insertions, 12 deletions
@@ -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) @@ -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(); } @@ -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); @@ -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 @@ -39,6 +39,8 @@ char* mode_str(){ return "par"; case REM: return "rem"; + case TRP: + return "trp"; default: return "ERR"; } |