mouse selection works
This commit is contained in:
parent
69a88bcf5c
commit
8824c53dff
49
src/music.c
49
src/music.c
|
@ -1029,6 +1029,8 @@ static void setChannelPattern(Music* music, s32 delta, s32 channel)
|
||||||
|
|
||||||
static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
|
static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
|
||||||
{
|
{
|
||||||
|
tic_mem* tic = music->tic;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
Border = 1,
|
Border = 1,
|
||||||
|
@ -1047,8 +1049,34 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
|
||||||
s32 mx = getMouseX() - rect.x - Border;
|
s32 mx = getMouseX() - rect.x - Border;
|
||||||
s32 my = getMouseY() - rect.y - Border;
|
s32 my = getMouseY() - rect.y - Border;
|
||||||
|
|
||||||
music->tracker.col = channel * CHANNEL_COLS + mx / TIC_FONT_WIDTH;
|
s32 col = music->tracker.col = channel * CHANNEL_COLS + mx / TIC_FONT_WIDTH;
|
||||||
music->tracker.row = my / TIC_FONT_HEIGHT + music->tracker.scroll;
|
s32 row = music->tracker.row = my / TIC_FONT_HEIGHT + music->tracker.scroll;
|
||||||
|
|
||||||
|
if(music->tracker.select.drag)
|
||||||
|
{
|
||||||
|
s32 rl = SDL_min(col, music->tracker.select.start.x);
|
||||||
|
s32 rt = SDL_min(row, music->tracker.select.start.y);
|
||||||
|
s32 rr = SDL_max(col, music->tracker.select.start.x);
|
||||||
|
s32 rb = SDL_max(row, music->tracker.select.start.y);
|
||||||
|
|
||||||
|
music->tracker.select.rect = (SDL_Rect){rl, rt, rr - rl + 1, rb - rt + 1};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
music->tracker.select.start = (SDL_Point){col, row};
|
||||||
|
music->tracker.select.rect = (SDL_Rect){0, 0, 0, 0};
|
||||||
|
|
||||||
|
music->tracker.select.drag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(music->tracker.select.drag)
|
||||||
|
{
|
||||||
|
SDL_Rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
|
||||||
|
if(!checkMouseDown(&rect, SDL_BUTTON_LEFT))
|
||||||
|
{
|
||||||
|
music->tracker.select.drag = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1056,6 +1084,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
|
||||||
|
|
||||||
s32 start = music->tracker.scroll;
|
s32 start = music->tracker.scroll;
|
||||||
s32 end = start + Rows;
|
s32 end = start + Rows;
|
||||||
|
bool selectedChannel = music->tracker.select.rect.x / CHANNEL_COLS == channel;
|
||||||
|
|
||||||
tic_track_pattern* pattern = getPattern(music, channel);
|
tic_track_pattern* pattern = getPattern(music, channel);
|
||||||
|
|
||||||
|
@ -1068,6 +1097,16 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
|
||||||
music->tic->api.rect(music->tic, x - 1, rowy - 1, Width, TIC_FONT_HEIGHT + 1, systemColor(tic_color_dark_red));
|
music->tic->api.rect(music->tic, x - 1, rowy - 1, Width, TIC_FONT_HEIGHT + 1, systemColor(tic_color_dark_red));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// draw selection
|
||||||
|
if (selectedChannel)
|
||||||
|
{
|
||||||
|
if (i >= music->tracker.select.rect.y && i < music->tracker.select.rect.y + music->tracker.select.rect.h)
|
||||||
|
{
|
||||||
|
s32 sx = (music->tracker.select.rect.x % CHANNEL_COLS) * TIC_FONT_WIDTH + x - 1;
|
||||||
|
tic->api.rect(tic, sx, rowy - 1, (music->tracker.select.rect.w) * TIC_FONT_WIDTH + 1, TIC_FONT_HEIGHT + 1, systemColor(tic_color_yellow));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (checkPlayRow(music, i))
|
if (checkPlayRow(music, i))
|
||||||
{
|
{
|
||||||
music->tic->api.rect(music->tic, x - 1, rowy - 1, Width, TIC_FONT_HEIGHT + 1, systemColor(tic_color_white));
|
music->tic->api.rect(music->tic, x - 1, rowy - 1, Width, TIC_FONT_HEIGHT + 1, systemColor(tic_color_white));
|
||||||
|
@ -1423,6 +1462,12 @@ void initMusic(Music* music, tic_mem* tic)
|
||||||
},
|
},
|
||||||
|
|
||||||
.patterns = {true, true, true, true},
|
.patterns = {true, true, true, true},
|
||||||
|
.select =
|
||||||
|
{
|
||||||
|
.start = {0, 0},
|
||||||
|
.rect = {0, 0, 0, 0},
|
||||||
|
.drag = false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
.tab = MUSIC_TRACKER_TAB,
|
.tab = MUSIC_TRACKER_TAB,
|
||||||
|
|
|
@ -49,6 +49,13 @@ struct Music
|
||||||
s32 volume;
|
s32 volume;
|
||||||
} last;
|
} last;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
SDL_Point start;
|
||||||
|
SDL_Rect rect;
|
||||||
|
bool drag;
|
||||||
|
} select;
|
||||||
|
|
||||||
bool patterns[TIC_SOUND_CHANNELS];
|
bool patterns[TIC_SOUND_CHANNELS];
|
||||||
|
|
||||||
} tracker;
|
} tracker;
|
||||||
|
|
Loading…
Reference in New Issue