Introduction
Introduction Statistics Contact Development Disclaimer Help
refactor box management -- towards trapezium - gramscii - A simple editor for A…
Log
Files
Refs
Tags
README
LICENSE
---
commit e8c98a65cd161a5d2c0a76d41e39b352e083a9ab
parent ce2bfb4d3a49a27bde7c8bbc6c6b1ef6f80054aa
Author: KatolaZ <[email protected]>
Date: Sat, 17 Aug 2019 07:43:03 +0100
refactor box management -- towards trapezium
Diffstat:
M draw.c | 88 +++++++++++++++++++++++------…
M gramscii.h | 14 ++++++++++++--
2 files changed, 77 insertions(+), 25 deletions(-)
---
diff --git a/draw.c b/draw.c
@@ -161,7 +161,7 @@ void draw_parallelogram(int x1, int y1, char st, char fix){
}
else
f = draw_xy;
- if (st & BOX_PARR){
+ if (st == BOX_PARR){
minoff = dy;
maxoff = 0;
lean = '/';
@@ -195,47 +195,89 @@ void draw_parallelogram(int x1, int y1, char st, char fix…
}
-char flip_lean(char st){
- if (st & BOX_PARR)
+char flip_par_lean(char st){
+ if (st == BOX_PARR)
return BOX_PARL;
- else if (st & BOX_PARL)
+ else if (st == BOX_PARL)
return BOX_PARR;
return st;
}
+void draw_trapezium(int x1, int y1, char st, char fix){
+
+}
+
+/*
+ * draw the current box, being it an actual box, a parallelogram, or a
+ * trapezium
+ */
+void update_box(int x1, int y1, char st, char fix){
+
+ if (st == BOX_RECT)
+ draw_box(x1, y1, fix);
+ else if (st & BOX_PAR)
+ draw_parallelogram(x1, y1, st, fix);
+ else if (st & BOX_TRAP)
+ draw_trapezium(x1, y1, st, fix);
+ status_bar();
+ show_cursor();
+}
+
+char toggle_trap_type(char st){
+ return st;
+}
+
+int box_end(char c, char st){
+ if (c == '\n' ||
+ c == 27 ||
+ ((st == BOX_RECT) && c == 'b') ||
+ ((st & BOX_PAR) && c == 'z') ||
+ ((st & BOX_TRAP) && c == 't'))
+ return 1;
+ return 0;
+}
+
+/* draw boxes, parallelograms, and trapezia */
void get_box(FILE *fc, char st){
char c;
int orig_x=x, orig_y=y;
redraw();
step = 1;
+#ifdef DEBUG
+ fprintf(stderr, "box style: %d\n", st);
+#endif
draw_box(x,y,NOFIX);
- while((c=fgetc(fc))!=EOF && c != 27 && c!= 'b' && c != '\n'){
- if (c == 'Z'){
- st = flip_lean(st);
+ while((c=fgetc(fc))!=EOF && !box_end(c, st)){
+ if (c == 'Z' && (st & BOX_PAR)){
+ st = flip_par_lean(st);
redraw();
- goto update_box;
+#ifdef DEBUG
+ 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);
+ redraw();
+ update_box(orig_x, orig_y, st, NOFIX);
+ continue;
+ }
+ if (change_style(c)){
+ update_box(orig_x, orig_y, st, NOFIX);
+ continue;
}
- if (change_style(c))
- goto update_box;
if (!move_around(c, fc, 1))
continue;
check_bound(&x, &y);
redraw();
step = 1;
-update_box:
- 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 (st == BOX_RECT && (c == 'b' || c == '\n')){
- draw_box(orig_x, orig_y, FIX);
- modified = 1;
+ update_box(orig_x, orig_y, st, NOFIX);
}
- else if ((st & (BOX_PARR | BOX_PARL)) && (c == 'z' || c == '\n')){
- draw_parallelogram(orig_x, orig_y, st, FIX);
+ if (((st == BOX_RECT ) && (c == 'b' || c == '\n')) ||
+ ( (st & BOX_PAR ) && (c == 'z' || c == '\n')) ||
+ ( (st & BOX_TRAP ) && (c == 't' || c == '\n'))){
+ update_box(orig_x, orig_y, st, FIX);
modified = 1;
}
redraw();
diff --git a/gramscii.h b/gramscii.h
@@ -36,10 +36,20 @@
/** box style **/
/* rectangular box */
#define BOX_RECT 0x00
+/* parallelograms */
+#define BOX_PAR 0x04
/* parallelogram (leaning right) */
-#define BOX_PARR 0x01
+#define BOX_PARR 0x05
/* parallelogram (leaning left) */
-#define BOX_PARL 0x02
+#define BOX_PARL 0x06
+/* 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 NOFIX 0x0
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.