this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

drag TRACK/TEMPO/SPEED/ROWS numbers with mouse #323

nesbox 8d877eff 8dbeba66

+74 -52
+65 -49
src/studio/editors/music.c
··· 125 125 music->tracker.edit.x = channel * CHANNEL_COLS; 126 126 127 127 s32 mx = tic_api_mouse(tic).x - rect.x; 128 - music->tracker.col = mx / TIC_FONT_WIDTH; 128 + music->tracker.col = mx / TIC_FONT_WIDTH ? 1 : 0; 129 129 } 130 130 } 131 131 ··· 163 163 } 164 164 } 165 165 166 - static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value, void(*set)(Music*, s32, void* data), void* data) 166 + static inline s32 switchWidth(s32 value) 167 + { 168 + return value > 99 ? 3 * TIC_FONT_WIDTH : 2 * TIC_FONT_WIDTH; 169 + } 170 + 171 + static s32 getStep(Music* music) 167 172 { 168 - tic_api_print(music->tic, label, x, y+1, tic_color_black, true, 1, false); 169 - tic_api_print(music->tic, label, x, y, tic_color_white, true, 1, false); 173 + enum{DefaultStep = 1, ExtraStep = 5}; 174 + 175 + return tic_api_key(music->tic, tic_key_shift) ? ExtraStep : DefaultStep; 176 + } 177 + 178 + static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value, void(*set)(Music*, s32)) 179 + { 180 + tic_mem* tic = music->tic; 181 + 182 + tic_api_print(tic, label, x, y+1, tic_color_black, true, 1, false); 183 + tic_api_print(tic, label, x, y, tic_color_white, true, 1, false); 170 184 171 185 x += strlen(label) * TIC_FONT_WIDTH + TIC_ALTFONT_WIDTH; 172 186 ··· 185 199 down = true; 186 200 187 201 if (checkMouseClick(music->studio, &rect, tic_mouse_left)) 188 - set(music, -1, data); 202 + set(music, value - getStep(music)); 189 203 } 190 204 191 205 drawBitIcon(music->studio, tic_icon_left, rect.x - 2, rect.y + (down ? 1 : 0), tic_color_black); ··· 193 207 } 194 208 195 209 { 210 + tic_rect rect = { x, y, switchWidth(value), TIC_FONT_HEIGHT }; 211 + 212 + if((tic->ram->input.mouse.btns & 1) == 0) 213 + music->drag.label = NULL; 214 + 215 + if(music->drag.label == label) 216 + { 217 + tic_point m = tic_api_mouse(tic); 218 + enum{Speed = 2}; 219 + set(music, music->drag.start + (m.x - music->drag.x) / Speed); 220 + } 221 + 222 + if (checkMousePos(music->studio, &rect)) 223 + { 224 + setCursor(music->studio, tic_cursor_hand); 225 + 226 + if (checkMouseDown(music->studio, &rect, tic_mouse_left)) 227 + { 228 + if(!music->drag.label) 229 + { 230 + music->drag.label = label; 231 + music->drag.x = tic_api_mouse(tic).x; 232 + music->drag.start = value; 233 + } 234 + } 235 + } 236 + 196 237 char val[sizeof "999"]; 197 238 sprintf(val, "%02i", value); 198 - tic_api_print(music->tic, val, x, y+1, tic_color_black, true, 1, false); 199 - tic_api_print(music->tic, val, x, y, tic_color_yellow, true, 1, false); 239 + tic_api_print(tic, val, x, y+1, tic_color_black, true, 1, false); 240 + tic_api_print(tic, val, x, y, tic_color_yellow, true, 1, false); 200 241 } 201 242 202 243 { 203 - tic_rect rect = { x + (value > 99 ? 3 : 2) * TIC_FONT_WIDTH, y, TIC_ALTFONT_WIDTH, TIC_FONT_HEIGHT }; 244 + tic_rect rect = { x + switchWidth(value), y, TIC_ALTFONT_WIDTH, TIC_FONT_HEIGHT }; 204 245 205 246 bool over = false; 206 247 bool down = false; ··· 214 255 down = true; 215 256 216 257 if (checkMouseClick(music->studio, &rect, tic_mouse_left)) 217 - set(music, +1, data); 258 + set(music, value + getStep(music)); 218 259 } 219 260 220 261 drawBitIcon(music->studio, tic_icon_right, rect.x - 2, rect.y + (down ? 1 : 0), tic_color_black); ··· 1465 1506 } 1466 1507 } 1467 1508 1468 - static s32 getStep(Music* music) 1469 - { 1470 - enum{DefaultStep = 1, ExtraStep = 5}; 1471 - 1472 - return tic_api_key(music->tic, tic_key_shift) ? ExtraStep : DefaultStep; 1473 - } 1474 - 1475 - static void setIndex(Music* music, s32 delta, void* data) 1509 + static void setIndex(Music* music, s32 value) 1476 1510 { 1477 - music->track += delta * getStep(music); 1511 + music->track = CLAMP(value, 0, MUSIC_TRACKS-1); 1478 1512 } 1479 1513 1480 - static void setTempo(Music* music, s32 delta, void* data) 1514 + static void setTempo(Music* music, s32 value) 1481 1515 { 1482 1516 enum 1483 1517 { ··· 1485 1519 Max = 250-DEFAULT_TEMPO, 1486 1520 }; 1487 1521 1522 + value -= DEFAULT_TEMPO; 1488 1523 tic_track* track = getTrack(music); 1489 - 1490 - s32 tempo = track->tempo; 1491 - tempo += delta * getStep(music); 1492 - 1493 - if (tempo > Max) tempo = Max; 1494 - if (tempo < Min) tempo = Min; 1495 - 1496 - track->tempo = tempo; 1524 + track->tempo = CLAMP(value, Min, Max); 1497 1525 1498 1526 history_add(music->history); 1499 1527 } 1500 1528 1501 - static void setSpeed(Music* music, s32 delta, void* data) 1529 + static void setSpeed(Music* music, s32 value) 1502 1530 { 1503 1531 enum 1504 1532 { ··· 1506 1534 Max = 31-DEFAULT_SPEED, 1507 1535 }; 1508 1536 1537 + value -= DEFAULT_SPEED; 1509 1538 tic_track* track = getTrack(music); 1510 - 1511 - s32 speed = track->speed; 1512 - speed += delta * getStep(music); 1513 - 1514 - if (speed > Max) speed = Max; 1515 - if (speed < Min) speed = Min; 1516 - 1517 - track->speed = speed; 1539 + track->speed = CLAMP(value, Min, Max); 1518 1540 1519 1541 history_add(music->history); 1520 1542 } 1521 1543 1522 - static void setRows(Music* music, s32 delta, void* data) 1544 + static void setRows(Music* music, s32 value) 1523 1545 { 1524 1546 enum 1525 1547 { ··· 1527 1549 Max = MUSIC_PATTERN_ROWS - TRACKER_ROWS, 1528 1550 }; 1529 1551 1552 + value = MUSIC_PATTERN_ROWS - value; 1530 1553 tic_track* track = getTrack(music); 1531 - s32 rows = track->rows; 1532 - rows -= delta * getStep(music); 1533 - 1534 - if (rows < Min) rows = Min; 1535 - if (rows > Max) rows = Max; 1536 - 1537 - track->rows = rows; 1538 - 1554 + track->rows = CLAMP(value, Min, Max); 1539 1555 updateTracker(music); 1540 1556 1541 1557 history_add(music->history); ··· 1545 1561 { 1546 1562 tic_track* track = getTrack(music); 1547 1563 1548 - drawSwitch(music, x, y, "TRACK", music->track, setIndex, NULL); 1549 - drawSwitch(music, x += TIC_FONT_WIDTH * 9, y, "TEMPO", track->tempo + DEFAULT_TEMPO, setTempo, NULL); 1550 - drawSwitch(music, x += TIC_FONT_WIDTH * 10, y, "SPD", track->speed + DEFAULT_SPEED, setSpeed, NULL); 1551 - drawSwitch(music, x += TIC_FONT_WIDTH * 7, y, "ROWS", MUSIC_PATTERN_ROWS - track->rows, setRows, NULL); 1564 + drawSwitch(music, x, y, "TRACK", music->track, setIndex); 1565 + drawSwitch(music, x += TIC_FONT_WIDTH * 9, y, "TEMPO", track->tempo + DEFAULT_TEMPO, setTempo); 1566 + drawSwitch(music, x += TIC_FONT_WIDTH * 10, y, "SPD", track->speed + DEFAULT_SPEED, setSpeed); 1567 + drawSwitch(music, x += TIC_FONT_WIDTH * 7, y, "ROWS", MUSIC_PATTERN_ROWS - track->rows, setRows); 1552 1568 } 1553 1569 1554 1570 static void drawTrackerFrames(Music* music, s32 x, s32 y)
+8 -1
src/studio/editors/music.h
··· 32 32 tic_mem* tic; 33 33 tic_music* src; 34 34 35 - u8 track:MUSIC_TRACKS_BITS; 35 + u8 track; 36 36 s32 frame; 37 37 38 38 struct ··· 81 81 MUSIC_PIANO_TAB, 82 82 MUSIC_TAB_COUNT, 83 83 } tab; 84 + 85 + struct 86 + { 87 + const char* label; 88 + s32 x; 89 + s32 start; 90 + } drag; 84 91 85 92 u32 tickCounter; 86 93
+1 -2
src/tic.h
··· 78 78 #define TRACK_PATTERN_MASK ((1 << TRACK_PATTERN_BITS) - 1) 79 79 #define TRACK_PATTERNS_SIZE (TRACK_PATTERN_BITS * TIC_SOUND_CHANNELS / BITS_IN_BYTE) 80 80 #define MUSIC_FRAMES 16 81 - #define MUSIC_TRACKS_BITS 3 82 - #define MUSIC_TRACKS (1 << MUSIC_TRACKS_BITS) 81 + #define MUSIC_TRACKS 8 83 82 #define DEFAULT_TEMPO 150 84 83 #define DEFAULT_SPEED 6 85 84 #define PITCH_DELTA 128