|
|
@@ -72,37 +72,39 @@ void process_pattern_keys(uint8_t k, uint8_t m, bool is_held_key) { |
|
|
offset = 56; |
|
|
} |
|
|
else if (match_no_mod(m, k, HID_OPEN_BRACKET)) { // [ |
|
|
int16_t v = tele_get_pattern_val(pattern, base + offset); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, base + offset); |
|
|
if (v > INT16_MIN) { // -32767 |
|
|
tele_set_pattern_val(pattern, base + offset, v - 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, v - 1); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
} |
|
|
else if (match_no_mod(m, k, HID_CLOSE_BRACKET)) { // ] |
|
|
int16_t v = tele_get_pattern_val(pattern, base + offset); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, base + offset); |
|
|
if (v < INT16_MAX) { // 32766 |
|
|
tele_set_pattern_val(pattern, base + offset, v + 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, v + 1); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
} |
|
|
else if (match_no_mod(m, k, HID_BACKSPACE)) { // backspace |
|
|
int16_t v = tele_get_pattern_val(pattern, base + offset) / 10; |
|
|
tele_set_pattern_val(pattern, base + offset, v); |
|
|
int16_t v = |
|
|
ss_get_pattern_val(&scene_state, pattern, base + offset) / 10; |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, v); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_shift(m, k, HID_BACKSPACE)) { // shift + backspace |
|
|
for (size_t i = base + offset; i < 63; i++) { |
|
|
int16_t v = tele_get_pattern_val(pattern, i + 1); |
|
|
tele_set_pattern_val(pattern, i, v); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, i + 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, i, v); |
|
|
} |
|
|
|
|
|
uint16_t l = tele_get_pattern_l(pattern); |
|
|
if (l > base + offset) tele_set_pattern_l(pattern, l - 1); |
|
|
uint16_t l = ss_get_pattern_len(&scene_state, pattern); |
|
|
if (l > base + offset) ss_set_pattern_len(&scene_state, pattern, l - 1); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_no_mod(m, k, HID_ENTER)) { // enter |
|
|
uint16_t l = tele_get_pattern_l(pattern); |
|
|
if (base + offset == l && l < 64) tele_set_pattern_l(pattern, l + 1); |
|
|
uint16_t l = ss_get_pattern_len(&scene_state, pattern); |
|
|
if (base + offset == l && l < 64) |
|
|
ss_set_pattern_len(&scene_state, pattern, l + 1); |
|
|
base++; |
|
|
if (base == 8) { |
|
|
base = 7; |
|
|
@@ -112,49 +114,51 @@ void process_pattern_keys(uint8_t k, uint8_t m, bool is_held_key) { |
|
|
} |
|
|
else if (match_shift(m, k, HID_ENTER)) { // shift + enter |
|
|
for (int i = 63; i > base + offset; i--) { |
|
|
int16_t v = tele_get_pattern_val(pattern, i - 1); |
|
|
tele_set_pattern_val(pattern, i, v); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, i - 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, i, v); |
|
|
} |
|
|
uint16_t l = tele_get_pattern_l(pattern); |
|
|
if (l < 64) { tele_set_pattern_l(pattern, l + 1); } |
|
|
uint16_t l = ss_get_pattern_len(&scene_state, pattern); |
|
|
if (l < 64) { ss_set_pattern_len(&scene_state, pattern, l + 1); } |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_alt(m, k, HID_X)) { // alt + x = cut |
|
|
copy_buffer = tele_get_pattern_val(pattern, base + offset); |
|
|
copy_buffer = ss_get_pattern_val(&scene_state, pattern, base + offset); |
|
|
for (int i = base + offset; i < 63; i++) { |
|
|
int16_t v = tele_get_pattern_val(pattern, i + 1); |
|
|
tele_set_pattern_val(pattern, i, v); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, i + 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, i, v); |
|
|
} |
|
|
|
|
|
uint16_t l = tele_get_pattern_l(pattern); |
|
|
if (l > base + offset) { tele_set_pattern_l(pattern, l - 1); } |
|
|
uint16_t l = ss_get_pattern_len(&scene_state, pattern); |
|
|
if (l > base + offset) { |
|
|
ss_set_pattern_len(&scene_state, pattern, l - 1); |
|
|
} |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_alt(m, k, HID_C)) { // alt + c = copy |
|
|
copy_buffer = tele_get_pattern_val(pattern, base + offset); |
|
|
copy_buffer = ss_get_pattern_val(&scene_state, pattern, base + offset); |
|
|
} |
|
|
else if (match_alt(m, k, HID_V)) { // alt + v = paste |
|
|
tele_set_pattern_val(pattern, base + offset, copy_buffer); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, copy_buffer); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_shift_alt(m, k, HID_V)) { // shift + alt + v = insert paste |
|
|
for (int i = 63; i > base + offset; i--) { |
|
|
int16_t v = tele_get_pattern_val(pattern, i - 1); |
|
|
tele_set_pattern_val(pattern, i, v); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, i - 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, i, v); |
|
|
} |
|
|
uint16_t l = tele_get_pattern_l(pattern); |
|
|
uint16_t l = ss_get_pattern_len(&scene_state, pattern); |
|
|
if (l >= base + offset && l < 63) { |
|
|
tele_set_pattern_l(pattern, l + 1); |
|
|
ss_set_pattern_len(&scene_state, pattern, l + 1); |
|
|
} |
|
|
tele_set_pattern_val(pattern, base + offset, copy_buffer); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, copy_buffer); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_shift(m, k, HID_L)) { // shift + l |
|
|
tele_set_pattern_l(pattern, base + offset + 1); |
|
|
ss_set_pattern_len(&scene_state, pattern, base + offset + 1); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_alt(m, k, HID_L)) { // alt + l |
|
|
uint16_t l = tele_get_pattern_l(pattern); |
|
|
uint16_t l = ss_get_pattern_len(&scene_state, pattern); |
|
|
if (l) { |
|
|
offset = ((l - 1) >> 3) << 3; |
|
|
base = (l - 1) & 0x7; |
|
|
@@ -171,11 +175,11 @@ void process_pattern_keys(uint8_t k, uint8_t m, bool is_held_key) { |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_shift(m, k, HID_S)) { // shift + s |
|
|
tele_set_pattern_start(pattern, offset + base); |
|
|
ss_set_pattern_start(&scene_state, pattern, offset + base); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_alt(m, k, HID_S)) { // alt + s |
|
|
int16_t start = tele_get_pattern_start(pattern); |
|
|
int16_t start = ss_get_pattern_start(&scene_state, pattern); |
|
|
if (start) { |
|
|
offset = (start >> 3) << 3; |
|
|
base = start & 0x7; |
|
|
@@ -192,11 +196,11 @@ void process_pattern_keys(uint8_t k, uint8_t m, bool is_held_key) { |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_shift(m, k, HID_E)) { // shift + e |
|
|
tele_set_pattern_end(pattern, offset + base); |
|
|
ss_set_pattern_end(&scene_state, pattern, offset + base); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_alt(m, k, HID_E)) { // alt + e |
|
|
int16_t end = tele_get_pattern_end(pattern); |
|
|
int16_t end = ss_get_pattern_end(&scene_state, pattern); |
|
|
if (end) { |
|
|
offset = (end >> 3) << 3; |
|
|
base = end & 0x7; |
|
|
@@ -213,41 +217,41 @@ void process_pattern_keys(uint8_t k, uint8_t m, bool is_held_key) { |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_no_mod(m, k, HID_UNDERSCORE)) { // - |
|
|
int16_t v = tele_get_pattern_val(pattern, base + offset); |
|
|
tele_set_pattern_val(pattern, base + offset, -v); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, base + offset); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, -v); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if (match_no_mod(m, k, HID_SPACEBAR)) { // space |
|
|
if (tele_get_pattern_val(pattern, base + offset)) |
|
|
tele_set_pattern_val(pattern, base + offset, 0); |
|
|
if (ss_get_pattern_val(&scene_state, pattern, base + offset)) |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, 0); |
|
|
else |
|
|
tele_set_pattern_val(pattern, base + offset, 1); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, 1); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
else if ((m == HID_MODIFIER_NONE) && (k >= HID_1 && k <= HID_0)) { |
|
|
uint8_t n = (k - HID_1 + 1) % 10; // convert HID numbers to decimal, |
|
|
// taking care of HID_0 |
|
|
int16_t v = tele_get_pattern_val(pattern, base + offset); |
|
|
int16_t v = ss_get_pattern_val(&scene_state, pattern, base + offset); |
|
|
if (v && v < 3276 && v > -3276) { |
|
|
v = v * 10; |
|
|
if (v > 0) |
|
|
tele_set_pattern_val(pattern, base + offset, v + n); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, v + n); |
|
|
else |
|
|
tele_set_pattern_val(pattern, base + offset, v - n); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, v - n); |
|
|
} |
|
|
else |
|
|
tele_set_pattern_val(pattern, base + offset, n); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, n); |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
} |
|
|
|
|
|
void process_pattern_knob(uint16_t knob, uint8_t m) { |
|
|
if (m == HID_MODIFIER_LEFT_CTRL || m == HID_MODIFIER_RIGHT_CTRL) { |
|
|
if (m == HID_MODIFIER_LEFT_SHIFT || m == HID_MODIFIER_RIGHT_SHIFT) { |
|
|
tele_set_pattern_val(pattern, base + offset, knob >> 2); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, knob >> 2); |
|
|
} |
|
|
else { |
|
|
tele_set_pattern_val(pattern, base + offset, knob >> 7); |
|
|
ss_set_pattern_val(&scene_state, pattern, base + offset, knob >> 7); |
|
|
} |
|
|
r_edit_dirty |= R_ALL; |
|
|
} |
|
|
@@ -264,29 +268,29 @@ void screen_refresh_pattern() { |
|
|
|
|
|
for (uint8_t x = 0; x < 4; x++) { |
|
|
uint8_t a = 1; |
|
|
if (tele_get_pattern_l(x) > y + offset) a = 6; |
|
|
if (ss_get_pattern_len(&scene_state, x) > y + offset) a = 6; |
|
|
|
|
|
itoa(tele_get_pattern_val(x, y + offset), s, 10); |
|
|
itoa(ss_get_pattern_val(&scene_state, x, y + offset), s, 10); |
|
|
font_string_region_clip_right(&line[y], s, (x + 1) * 30 + 4, 0, a, |
|
|
0); |
|
|
|
|
|
if (y + offset >= tele_get_pattern_start(x)) { |
|
|
if (y + offset <= tele_get_pattern_end(x)) { |
|
|
if (y + offset >= ss_get_pattern_start(&scene_state, x)) { |
|
|
if (y + offset <= ss_get_pattern_end(&scene_state, x)) { |
|
|
for (uint8_t i = 0; i < 8; i += 2) { |
|
|
line[y].data[i * 128 + (x + 1) * 30 + 6] = 1; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
if (y + offset == tele_get_pattern_i(x)) { |
|
|
if (y + offset == ss_get_pattern_idx(&scene_state, x)) { |
|
|
line[y].data[2 * 128 + (x + 1) * 30 + 6] = 11; |
|
|
line[y].data[3 * 128 + (x + 1) * 30 + 6] = 11; |
|
|
line[y].data[4 * 128 + (x + 1) * 30 + 6] = 11; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
itoa(tele_get_pattern_val(pattern, base + offset), s, 10); |
|
|
itoa(ss_get_pattern_val(&scene_state, pattern, base + offset), s, 10); |
|
|
font_string_region_clip_right(&line[base], s, (pattern + 1) * 30 + 4, 0, |
|
|
0xf, 0); |
|
|
|
|
|
|