ref: 2fddfeca82132cd1e72ddd5c29f94536bc02a7dd
parent: de388d38b4f791585e9ec9e4f47a11e9ebcdb569
author: cancel <cancel@cancel.fm>
date: Sat Jan 18 12:05:03 EST 2020
Add start of options for grid styling
--- a/tui_main.c
+++ b/tui_main.c
@@ -511,7 +511,8 @@
int draw_w, Glyph const *restrict gbuffer,
Mark const *restrict mbuffer, Usz field_h, Usz field_w,
Usz offset_y, Usz offset_x, Usz ruler_spacing_y,
- Usz ruler_spacing_x) {
+ Usz ruler_spacing_x, bool use_fancy_dots,
+ bool use_fancy_rulers) {
assert(draw_y >= 0 && draw_x >= 0);
assert(draw_h >= 0 && draw_w >= 0);
enum { Bufcount = 4096 };
@@ -532,11 +533,10 @@
if (rows == 0 || cols == 0)
return;
bool use_rulers = ruler_spacing_y != 0 && ruler_spacing_x != 0;
- chtype bullet = ACS_BULLET;
+ chtype bullet = use_fancy_dots ? ACS_BULLET : '.';
enum { T = 1 << 0, B = 1 << 1, L = 1 << 2, R = 1 << 3 };
chtype rs[(T | B | L | R) + 1];
if (use_rulers) {
- bool use_fancy_rulers = true;
for (Usz i = 0; i < sizeof rs / sizeof(chtype); ++i) {
rs[i] = '+';
}
@@ -586,7 +586,8 @@
int draw_w, Glyph const *restrict gbuffer,
Mark const *restrict mbuffer, Usz field_h,
Usz field_w, int scroll_y, int scroll_x,
- Usz ruler_spacing_y, Usz ruler_spacing_x) {
+ Usz ruler_spacing_y, Usz ruler_spacing_x,
+ bool use_fancy_dots, bool use_fancy_rulers) {
if (scroll_y < 0) {
draw_y += -scroll_y;
scroll_y = 0;
@@ -597,7 +598,8 @@
}
draw_glyphs_grid(win, draw_y, draw_x, draw_h, draw_w, gbuffer, mbuffer,
field_h, field_w, (Usz)scroll_y, (Usz)scroll_x,
- ruler_spacing_y, ruler_spacing_x);
+ ruler_spacing_y, ruler_spacing_x, use_fancy_dots,
+ use_fancy_rulers);
}
void ged_cursor_confine(Ged_cursor *tc, Usz height, Usz width) {
@@ -1322,7 +1324,8 @@
return true;
}
-void ged_draw(Ged *a, WINDOW *win, char const *filename) {
+void ged_draw(Ged *a, WINDOW *win, char const *filename, bool use_fancy_dots,
+ bool use_fancy_rulers) {
// We can predictavely step the next simulation tick and then use the
// resulting mark buffer for better UI visualization. If we don't do this,
// after loading a fresh file or after the user performs some edit (or even
@@ -1346,10 +1349,10 @@
a->needs_remarking = false;
}
int win_w = a->win_w;
- draw_glyphs_grid_scrolled(win, 0, 0, a->grid_h, win_w, a->field.buffer,
- a->mbuf_r.buffer, a->field.height, a->field.width,
- a->grid_scroll_y, a->grid_scroll_x,
- a->ruler_spacing_y, a->ruler_spacing_x);
+ draw_glyphs_grid_scrolled(
+ win, 0, 0, a->grid_h, win_w, a->field.buffer, a->mbuf_r.buffer,
+ a->field.height, a->field.width, a->grid_scroll_y, a->grid_scroll_x,
+ a->ruler_spacing_y, a->ruler_spacing_x, use_fancy_dots, use_fancy_rulers);
draw_grid_cursor(win, 0, 0, a->grid_h, win_w, a->field.buffer,
a->field.height, a->field.width, a->grid_scroll_y,
a->grid_scroll_x, a->ged_cursor.y, a->ged_cursor.x,
@@ -2356,7 +2359,7 @@
typedef struct {
oso *portmidi_output_device;
int softmargin_y, softmargin_x;
- bool has_softmargins : 1;
+ U32 touched;
} Prefs;
void prefs_init(Prefs *p) { *p = (Prefs){0}; }
@@ -2369,10 +2372,16 @@
char const *const confopts[] = {"portmidi_output_device", "margins"};
enum { Confoptslen = ORCA_ARRAY_COUNTOF(confopts) };
enum {
- Confopt_portmidi_output_device,
+ Confopt_portmidi_output_device = 0,
Confopt_margins,
};
+enum {
+ Preftouch_softmargins = 1 << 0,
+ Preftouch_griddotstype = 1 << 1,
+ Preftouch_gridrulerstype = 1 << 2,
+};
+
ORCA_FORCE_NO_INLINE
Prefs_load_error prefs_load_from_conf_file(Prefs *p) {
Ezconf_r ez;
@@ -2387,7 +2396,7 @@
softmargin_y >= 0 && softmargin_x >= 0) {
p->softmargin_y = softmargin_y;
p->softmargin_x = softmargin_x;
- p->has_softmargins = true;
+ p->touched |= Preftouch_softmargins;
}
} break;
}
@@ -2395,9 +2404,9 @@
return Prefs_load_ok;
}
-void save_prefs_with_error_message(Midi_mode const *midi_mode, int softmargin_y,
- int softmargin_x,
- bool softmargins_touched_by_user) {
+void save_prefs_with_error_message(U32 prefs_touched,
+ Midi_mode const *midi_mode, int softmargin_y,
+ int softmargin_x) {
Ezconf_opt optsbuff[Confoptslen];
Ezconf_w ez;
ezconf_w_start(&ez, optsbuff, ORCA_ARRAY_COUNTOF(optsbuff));
@@ -2422,7 +2431,7 @@
} break;
#endif
}
- if (softmargins_touched_by_user) {
+ if (prefs_touched & Preftouch_softmargins) {
ezconf_w_addopt(&ez, confopts[Confopt_margins], Confopt_margins);
}
while (ezconf_w_step(&ez)) {
@@ -2502,8 +2511,8 @@
int init_grid_dim_y = 25, init_grid_dim_x = 57;
int softmargin_y = 1, softmargin_x = 2;
int hardmargin_y = 0, hardmargin_x = 0;
+ U32 prefs_touched = 0;
bool use_gui_cboard = true;
- bool softmargins_touched_by_user = false;
bool strict_timing = false;
bool should_autosize_grid = true;
Midi_mode midi_mode;
@@ -2731,8 +2740,8 @@
prefs_init(&prefs);
Prefs_load_error prefserr = prefs_load_from_conf_file(&prefs);
if (prefserr == Prefs_load_ok) {
- if (prefs.has_softmargins) {
- softmargins_touched_by_user = true;
+ if (prefs.touched & Preftouch_softmargins) {
+ prefs_touched |= Preftouch_softmargins;
softmargin_y = prefs.softmargin_y;
softmargin_x = prefs.softmargin_x;
}
@@ -2770,6 +2779,7 @@
bracketed_paste_x = 0, bracketed_paste_max_y = 0,
bracketed_paste_max_x = 0;
bool is_in_bracketed_paste = false;
+ bool fancy_grid_dots = true, fancy_grid_rulers = true;
// Send initial BPM
send_num_message(ged_state.oosc_dev, "/orca/bpm", (I32)ged_state.bpm);
@@ -2783,7 +2793,8 @@
drew_any = true;
if (ged_is_draw_dirty(&ged_state) || drew_any) {
werase(cont_window);
- ged_draw(&ged_state, cont_window, (char const *)file_name);
+ ged_draw(&ged_state, cont_window, (char const *)file_name,
+ fancy_grid_dots, fancy_grid_rulers);
wnoutrefresh(cont_window);
drew_any = true;
}
@@ -3139,9 +3150,8 @@
"Error setting PortMidi output device:\n%s",
Pm_GetErrorText(pme));
} else {
- save_prefs_with_error_message(&midi_mode, softmargin_y,
- softmargin_x,
- softmargins_touched_by_user);
+ save_prefs_with_error_message(prefs_touched, &midi_mode,
+ softmargin_y, softmargin_x);
}
} break;
#endif
@@ -3250,7 +3260,7 @@
if (read_nxn_or_n(osoc(tmpstr), &newx, &newy) && newy >= 0 &&
newx >= 0 &&
(newy != softmargin_y || newx != softmargin_x)) {
- softmargins_touched_by_user = true;
+ prefs_touched |= Preftouch_softmargins;
softmargin_y = newy;
softmargin_x = newx;
ungetch(KEY_RESIZE); // kinda lame but whatever
@@ -3259,9 +3269,8 @@
qnav_stack_pop();
// Might push message, so gotta pop old guy first
if (do_save)
- save_prefs_with_error_message(&midi_mode, softmargin_y,
- softmargin_x,
- softmargins_touched_by_user);
+ save_prefs_with_error_message(prefs_touched, &midi_mode,
+ softmargin_y, softmargin_x);
}
osofree(tmpstr);
} break;